Compare commits

..

3 Commits
1.0 ... master

Author SHA1 Message Date
1f7ba5e375 added screen scaling 2017-11-11 11:56:39 +01:00
1c469f7cd2 fixed bug with proxy 2017-11-02 21:17:00 +01:00
8c393a36ec add cashing and refresh button 2017-09-29 15:55:46 +02:00
13 changed files with 210 additions and 55 deletions

View File

@ -2,7 +2,7 @@ apply plugin: 'com.android.application'
android { android {
compileSdkVersion 26 compileSdkVersion 26
buildToolsVersion "26.0.0" buildToolsVersion '26.0.2'
defaultConfig { defaultConfig {
applicationId "de.tysox.bs_elmshorn" applicationId "de.tysox.bs_elmshorn"
minSdkVersion 16 minSdkVersion 16

View File

@ -2,6 +2,8 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android" <manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="de.tysox.bs_elmshorn"> package="de.tysox.bs_elmshorn">
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<application <application
android:allowBackup="true" android:allowBackup="true"

Binary file not shown.

View File

@ -1,7 +1,11 @@
package de.tysox.bs_elmshorn; package de.tysox.bs_elmshorn;
import android.graphics.Typeface;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler;
import android.support.design.widget.TabLayout; import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment; import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentManager;
@ -12,11 +16,18 @@ import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar; import android.support.v7.widget.Toolbar;
import android.view.Menu; import android.view.Menu;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.View;
import android.view.Window; import android.view.Window;
import android.webkit.WebView;
import android.widget.TextView;
import java.util.Calendar;
public class MainActivity extends AppCompatActivity { public class MainActivity extends AppCompatActivity {
private static MainActivity instance; private static MainActivity instance;
private int currentWeek;
/** /**
* The {@link android.support.v4.view.PagerAdapter} that will provide * The {@link android.support.v4.view.PagerAdapter} that will provide
@ -39,17 +50,21 @@ public class MainActivity extends AppCompatActivity {
setContentView(R.layout.activity_main); setContentView(R.layout.activity_main);
instance = this; instance = this;
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); Calendar calendar = Calendar.getInstance();
currentWeek = calendar.get(Calendar.WEEK_OF_YEAR);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar); setSupportActionBar(toolbar);
// Create the adapter that will return a fragment for each of the three // Create the adapter that will return a fragment for each of the three
// primary sections of the activity. // primary sections of the activity.
mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
// Set up the ViewPager with the sections adapter. // Set up the ViewPager with the sections adapter.
mViewPager = (ViewPager) findViewById(R.id.container); mViewPager = findViewById(R.id.container);
mViewPager.setAdapter(mSectionsPagerAdapter); mViewPager.setAdapter(mSectionsPagerAdapter);
TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs); TabLayout tabLayout = findViewById(R.id.tabs);
mViewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); mViewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
tabLayout.addOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(mViewPager)); tabLayout.addOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(mViewPager));
@ -62,11 +77,50 @@ public class MainActivity extends AppCompatActivity {
} }
@Override @Override
public boolean onCreateOptionsMenu(Menu menu) { public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present. // Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu); getMenuInflater().inflate(R.menu.menu_main, menu);
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
final TextView refresh = findViewById(R.id.refresh);
final TextView left = findViewById(R.id.left);
final TextView right = findViewById(R.id.right);
Typeface font = Typeface.createFromAsset(getBaseContext().getAssets(), "font/fontawesome.ttf");
refresh.setTypeface(font);
right.setTypeface(font);
left.setTypeface(font);
refresh.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
WebView webView = findViewById(R.id.timetable);
webView.reload();
}
});
right.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
WebView webView = findViewById(R.id.timetable);
currentWeek++;
webView.loadUrl("https://tysox.de/webapps/timetable.php?week="+ currentWeek);
}
});
left.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
WebView webView = findViewById(R.id.timetable);
currentWeek--;
webView.loadUrl("https://tysox.de/webapps/timetable.php?week="+ currentWeek);
}
});
}
}, 100);
return true; return true;
} }
@ -78,10 +132,9 @@ public class MainActivity extends AppCompatActivity {
int id = item.getItemId(); int id = item.getItemId();
//noinspection SimplifiableIfStatement //noinspection SimplifiableIfStatement
if (id == R.id.action_settings) { /*if (id == R.id.action_settings) {
return true; return true;
} }*/
return super.onOptionsItemSelected(item); return super.onOptionsItemSelected(item);
} }
@ -97,6 +150,9 @@ public class MainActivity extends AppCompatActivity {
@Override @Override
public Fragment getItem(int position) { public Fragment getItem(int position) {
final TextView refresh = MainActivity.getInstance().findViewById(R.id.refresh);
final TextView left = MainActivity.getInstance().findViewById(R.id.left);
final TextView right = MainActivity.getInstance().findViewById(R.id.right);
switch (position) { switch (position) {
case 0: case 0:
Tab1 tab1 = new Tab1(); Tab1 tab1 = new Tab1();
@ -119,6 +175,12 @@ public class MainActivity extends AppCompatActivity {
} }
} }
public boolean isNetworkAvailable() {
ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService( CONNECTIVITY_SERVICE );
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}
public static MainActivity getInstance() { public static MainActivity getInstance() {
return instance; return instance;
} }

View File

@ -1,13 +1,18 @@
package de.tysox.bs_elmshorn; package de.tysox.bs_elmshorn;
import android.content.Context;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
import android.support.v4.app.Fragment; import android.support.v4.app.Fragment;
import android.view.Display;
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 android.view.WindowManager;
import android.webkit.WebSettings;
import android.webkit.WebView; import android.webkit.WebView;
import android.webkit.WebViewClient; import android.webkit.WebViewClient;
import android.widget.TextView;
import java.util.Calendar; import java.util.Calendar;
@ -26,26 +31,71 @@ public class Tab1 extends Fragment {
View rootView = inflater.inflate(R.layout.tab1, container, false); View rootView = inflater.inflate(R.layout.tab1, container, false);
Handler handler = new Handler(); Handler handler = new Handler();
handler.postDelayed(new Runnable() { handler.postDelayed(new Runnable() {
@Override @Override
public void run() { public void run() {
WebView webView= (WebView) MainActivity.getInstance().findViewById(R.id.timetable); WebView webView= (WebView) MainActivity.getInstance().findViewById(R.id.timetable);
webView.setWebViewClient(new WebViewClient()); webView.setWebViewClient(new WebViewClient());
webView.getSettings().setAppCacheMaxSize( 5 * 1024 * 1024 ); // 5MB
webView.getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
webView.getSettings().setAppCachePath( MainActivity.getInstance().getApplicationContext().getCacheDir().getAbsolutePath() );
webView.getSettings().setAllowFileAccess( true );
webView.getSettings().setAppCacheEnabled( true );
webView.getSettings().setJavaScriptEnabled(true); webView.getSettings().setJavaScriptEnabled(true);
webView.setVerticalScrollBarEnabled(false); webView.setVerticalScrollBarEnabled(false);
webView.setHorizontalScrollBarEnabled(false); webView.setHorizontalScrollBarEnabled(false);
webView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);
if(!MainActivity.getInstance().isNetworkAvailable()) {
webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
}
Calendar calendar = Calendar.getInstance(); Calendar calendar = Calendar.getInstance();
currentWeek = calendar.get(Calendar.WEEK_OF_YEAR); currentWeek = calendar.get(Calendar.WEEK_OF_YEAR);
webView.loadUrl("http://www.bs-elmshorn.de/Stundenplan/Schueler/"+currentWeek+"/c/c00018.htm"); webView.loadUrl("https://tysox.de/webapps/timetable.php?week="+ currentWeek);
// s5 mini 119 opx 170 // s5 mini 119 opx 170 xperia 113
webView.setInitialScale(119); webView.setPadding(0,0,0,0);
webView.setInitialScale(getScale());
} }
},100); },101);
return rootView; return rootView;
} }
private int getScale(){
Display display = ((WindowManager) MainActivity.getInstance().getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
int width = display.getWidth();
Double val = new Double(width)/new Double(690);
val = val * 100d;
return val.intValue();
}
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
final TextView refresh = MainActivity.getInstance().findViewById(R.id.refresh);
final TextView left = MainActivity.getInstance().findViewById(R.id.left);
final TextView right = MainActivity.getInstance().findViewById(R.id.right);
if (isVisibleToUser) {
try {
refresh.setVisibility(View.VISIBLE);
left.setVisibility(View.VISIBLE);
right.setVisibility(View.VISIBLE);
} catch (Exception ex) {
}
} else {
try {
refresh.setVisibility(View.INVISIBLE);
left.setVisibility(View.INVISIBLE);
right.setVisibility(View.INVISIBLE);
} catch (Exception ex) {
}
}
}
} }

View File

@ -6,11 +6,10 @@ import android.support.v4.app.Fragment;
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 android.webkit.WebSettings;
import android.webkit.WebView; import android.webkit.WebView;
import android.webkit.WebViewClient; import android.webkit.WebViewClient;
import java.util.Calendar;
/** /**
* Created by Jan on 16.09.2017. * Created by Jan on 16.09.2017.
*/ */
@ -22,23 +21,30 @@ public class Tab2 extends Fragment {
Bundle savedInstanceState) { Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.tab2, container, false); View rootView = inflater.inflate(R.layout.tab2, container, false);
Handler handler = new Handler(); Handler handler = new Handler();
handler.postDelayed(new Runnable() { handler.postDelayed(new Runnable() {
@Override @Override
public void run() { public void run() {
WebView webView= (WebView) MainActivity.getInstance().findViewById(R.id.vt1); WebView webView= (WebView) MainActivity.getInstance().findViewById(R.id.vt1);
webView.setWebViewClient(new WebViewClient()); webView.setWebViewClient(new WebViewClient());
webView.getSettings().setAppCacheMaxSize( 5 * 1024 * 1024 ); // 5MB
webView.getSettings().setAppCachePath( MainActivity.getInstance().getApplicationContext().getCacheDir().getAbsolutePath() );
webView.getSettings().setAllowFileAccess( true );
webView.getSettings().setAppCacheEnabled( true );
webView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);
webView.getSettings().setJavaScriptEnabled(true); webView.getSettings().setJavaScriptEnabled(true);
webView.setVerticalScrollBarEnabled(false); webView.setVerticalScrollBarEnabled(false);
webView.setHorizontalScrollBarEnabled(false); webView.setHorizontalScrollBarEnabled(false);
if(!MainActivity.getInstance().isNetworkAvailable()) {
webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
}
webView.loadUrl("http://www.bs-elmshorn.de/Stundenplan/DSB/f1/subst_001.htm"); webView.loadUrl("http://www.bs-elmshorn.de/Stundenplan/DSB/f1/subst_001.htm");
// s5 mini 100 opx 150 // s5 mini 100 opx 150
webView.setInitialScale(150); webView.setInitialScale(150);
} }
},100); },100);
return rootView; return rootView;
} }
} }

View File

@ -6,6 +6,7 @@ import android.support.v4.app.Fragment;
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 android.webkit.WebSettings;
import android.webkit.WebView; import android.webkit.WebView;
import android.webkit.WebViewClient; import android.webkit.WebViewClient;
@ -19,18 +20,28 @@ public class Tab3 extends Fragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container, public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) { Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.tab3, container, false); View rootView = inflater.inflate(R.layout.tab3, container, false);
Handler handler = new Handler(); Handler handler = new Handler();
handler.postDelayed(new Runnable() { handler.postDelayed(new Runnable() {
@Override @Override
public void run() { public void run() {
WebView webView= (WebView) MainActivity.getInstance().findViewById(R.id.vt2);
WebView webView= MainActivity.getInstance().findViewById(R.id.vt2);
webView.setWebViewClient(new WebViewClient()); webView.setWebViewClient(new WebViewClient());
webView.getSettings().setAppCacheMaxSize( 5 * 1024 * 1024 ); // 5MB
webView.getSettings().setAppCachePath( MainActivity.getInstance().getApplicationContext().getCacheDir().getAbsolutePath() );
webView.getSettings().setAllowFileAccess( true );
webView.getSettings().setAppCacheEnabled( true );
webView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);
webView.getSettings().setJavaScriptEnabled(true); webView.getSettings().setJavaScriptEnabled(true);
webView.setVerticalScrollBarEnabled(false); webView.setVerticalScrollBarEnabled(false);
webView.setHorizontalScrollBarEnabled(false); webView.setHorizontalScrollBarEnabled(false);
if(!MainActivity.getInstance().isNetworkAvailable()) {
webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
}
webView.loadUrl("http://www.bs-elmshorn.de/Stundenplan/DSB/f1/subst_002.htm"); webView.loadUrl("http://www.bs-elmshorn.de/Stundenplan/DSB/f1/subst_002.htm");
// s5 mini 100 opx 150 // s5 mini 100 opx 150
webView.setInitialScale(150); webView.setInitialScale(150);

View File

@ -8,8 +8,14 @@
<WebView <WebView
android:id="@+id/timetable" android:id="@+id/timetable"
android:layout_width="344dp" android:layout_width="385dp"
android:layout_height="495dp" android:layout_height="576dp"
tools:layout_editor_absoluteX="8dp" android:layout_marginBottom="8dp"
tools:layout_editor_absoluteY="8dp" /> android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout> </android.support.constraint.ConstraintLayout>

View File

@ -8,8 +8,14 @@
<WebView <WebView
android:id="@+id/vt1" android:id="@+id/vt1"
android:layout_width="344dp" android:layout_width="385dp"
android:layout_height="495dp" android:layout_height="576dp"
tools:layout_editor_absoluteX="8dp" android:layout_marginBottom="8dp"
tools:layout_editor_absoluteY="8dp" /> android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout> </android.support.constraint.ConstraintLayout>

View File

@ -6,24 +6,17 @@
android:layout_height="match_parent" android:layout_height="match_parent"
tools:context="de.tysox.bs_elmshorn.Tab3"> tools:context="de.tysox.bs_elmshorn.Tab3">
<TextView
android:id="@+id/section_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/activity_vertical_margin"
android:layout_marginEnd="@dimen/activity_horizontal_margin"
android:layout_marginStart="@dimen/activity_horizontal_margin"
android:layout_marginTop="@dimen/activity_vertical_margin"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="@+id/constraintLayout"
tools:layout_constraintLeft_creator="1"
tools:layout_constraintTop_creator="1" />
<WebView <WebView
android:id="@+id/vt2" android:id="@+id/vt2"
android:layout_width="344dp" android:layout_width="385dp"
android:layout_height="495dp" android:layout_height="576dp"
tools:layout_editor_absoluteX="8dp" android:layout_marginBottom="8dp"
tools:layout_editor_absoluteY="8dp" /> android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout> </android.support.constraint.ConstraintLayout>

View File

@ -1,10 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" <menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto">
xmlns:tools="http://schemas.android.com/tools"
tools:context="de.tysox.bs_elmshorn.MainActivity">
<item <item
android:id="@+id/action_settings" android:id="@+id/refresh"
android:orderInCategory="100" android:actionViewClass="android.widget.TextView"
android:title="@string/action_settings" android:title="@string/fa_refresh"
app:showAsAction="never" /> app:showAsAction="always"
/>
<item
android:id="@+id/left"
android:actionViewClass="android.widget.TextView"
android:title="@string/fa_left"
app:showAsAction="always"
/>
<item
android:id="@+id/right"
android:actionViewClass="android.widget.TextView"
android:title="@string/fa_right"
app:showAsAction="always" />
</menu> </menu>

View File

@ -4,4 +4,7 @@
<string name="tab_text_2">Vertretung 1</string> <string name="tab_text_2">Vertretung 1</string>
<string name="tab_text_3">Vertretung 2</string> <string name="tab_text_3">Vertretung 2</string>
<string name="action_settings">Settings</string> <string name="action_settings">Settings</string>
<string name="fa_refresh">&#xf021;</string>
<string name="fa_left">&#xf060;</string>
<string name="fa_right">&#xf061;</string>
</resources> </resources>

View File

@ -7,7 +7,7 @@ buildscript {
jcenter() jcenter()
} }
dependencies { dependencies {
classpath 'com.android.tools.build:gradle:3.0.0-beta6' classpath 'com.android.tools.build:gradle:3.0.0'
// NOTE: Do not place your application dependencies here; they belong // NOTE: Do not place your application dependencies here; they belong