add cashing and refresh button

This commit is contained in:
Jan-Lukas Pagel 2017-09-29 15:55:46 +02:00
parent 48d8fdab66
commit 8c393a36ec
8 changed files with 165 additions and 27 deletions

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("http://www.bs-elmshorn.de/Stundenplan/Schueler/" + currentWeek + "/c/c00018.htm");
}
});
left.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
WebView webView = findViewById(R.id.timetable);
currentWeek--;
webView.loadUrl("http://www.bs-elmshorn.de/Stundenplan/Schueler/" + currentWeek + "/c/c00018.htm");
}
});
}
}, 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

@ -6,8 +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 android.widget.TextView;
import java.util.Calendar; import java.util.Calendar;
@ -26,26 +28,62 @@ 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("http://www.bs-elmshorn.de/Stundenplan/Schueler/"+currentWeek+"/c/c00018.htm");
// s5 mini 119 opx 170 // s5 mini 119 opx 170 xperia 113
webView.setInitialScale(119); webView.setInitialScale(170);
} }
},100); },101);
return rootView; return rootView;
} }
@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

@ -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>