1
0
Fork 0
mirror of https://github.com/gsantner/dandelion synced 2024-11-25 13:52:08 +01:00

Added some experimental changes to keep the webview on orientation changes

This commit is contained in:
vanitasvitae 2016-09-05 20:42:57 +02:00
parent e7f74eb08d
commit 305a40c8c5
5 changed files with 83 additions and 7 deletions

View file

@ -54,6 +54,7 @@
android:name=".activity.MainActivity" android:name=".activity.MainActivity"
android:launchMode="singleInstance" android:launchMode="singleInstance"
android:windowSoftInputMode="adjustPan" android:windowSoftInputMode="adjustPan"
android:configChanges="keyboardHidden|orientation|screenSize"
android:theme="@style/AppTheme.NoActionBar" android:theme="@style/AppTheme.NoActionBar"
android:label="@string/diaspora"> android:label="@string/diaspora">

View file

@ -31,6 +31,7 @@ import android.content.DialogInterface;
import android.content.Intent; import android.content.Intent;
import android.content.IntentFilter; import android.content.IntentFilter;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.content.res.Configuration;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
@ -52,6 +53,7 @@ import android.support.v7.widget.Toolbar;
import android.util.Log; import android.util.Log;
import android.view.Gravity; import android.view.Gravity;
import android.view.KeyEvent; import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.Menu; import android.view.Menu;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.View; import android.view.View;
@ -64,6 +66,7 @@ import android.webkit.WebChromeClient;
import android.webkit.WebSettings; import android.webkit.WebSettings;
import android.webkit.WebView; import android.webkit.WebView;
import android.widget.EditText; import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.ProgressBar; import android.widget.ProgressBar;
@ -145,7 +148,9 @@ public class MainActivity extends AppCompatActivity
@BindView(R.id.toolbar2) @BindView(R.id.toolbar2)
ActionMenuView toolbarBottom; ActionMenuView toolbarBottom;
@BindView(R.id.webView) @BindView(R.id.placeholder_webview)
FrameLayout webviewPlaceholder;
ContextMenuWebView webView; ContextMenuWebView webView;
@BindView(R.id.main__navigaion_view) @BindView(R.id.main__navigaion_view)
@ -169,10 +174,10 @@ public class MainActivity extends AppCompatActivity
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
Log.d(App.TAG, "onCreate");
// Bind UI // Bind UI
setContentView(R.layout.main__activity); setContentView(R.layout.main__activity);
ButterKnife.bind(this);
app = (App) getApplication(); app = (App) getApplication();
appSettings = app.getSettings(); appSettings = app.getSettings();
@ -189,8 +194,23 @@ public class MainActivity extends AppCompatActivity
resetProxy(); resetProxy();
} }
setupWebView(savedInstanceState); setupUI(savedInstanceState);
}
private void setupUI(Bundle savedInstanceState) {
boolean newWebView = (webView == null);
if(newWebView) {
Log.d(App.TAG, "Webview was null. Create new one.");
View webviewHolder = getLayoutInflater().inflate(R.layout.webview, null);
webView = (ContextMenuWebView) webviewHolder.findViewById(R.id.webView);
((LinearLayout)webView.getParent()).removeView(webView);
setupWebView(savedInstanceState);
}
ButterKnife.bind(this);
if (webviewPlaceholder.getChildCount() != 0) {
webviewPlaceholder.removeAllViews();
}
webviewPlaceholder.addView(webView);
// Setup toolbar // Setup toolbar
setSupportActionBar(toolbarTop); setSupportActionBar(toolbarTop);
getMenuInflater().inflate(R.menu.main__menu_bottom, toolbarBottom.getMenu()); getMenuInflater().inflate(R.menu.main__menu_bottom, toolbarBottom.getMenu());
@ -231,8 +251,9 @@ public class MainActivity extends AppCompatActivity
progressBar = (ProgressBar) findViewById(R.id.progressBar); progressBar = (ProgressBar) findViewById(R.id.progressBar);
String url = urls.getPodUrl(); String url = urls.getPodUrl();
if (savedInstanceState == null) { if (newWebView) {
if (WebHelper.isOnline(MainActivity.this)) { if (WebHelper.isOnline(MainActivity.this)) {
Log.d(App.TAG, "setupUI: reload url");
webView.loadData("", "text/html", null); webView.loadData("", "text/html", null);
webView.loadUrlNew(url); webView.loadUrlNew(url);
} else { } else {
@ -248,6 +269,24 @@ public class MainActivity extends AppCompatActivity
handleIntent(getIntent()); handleIntent(getIntent());
} }
@Override
public void onConfigurationChanged(Configuration newConfig)
{
if (webView != null)
{
// Remove the WebView from the old placeholder
webviewPlaceholder.removeView(webView);
}
super.onConfigurationChanged(newConfig);
// Load the layout resource for the new configuration
setContentView(R.layout.main__activity);
// Reinitialize the UI
setupUI(null);
}
private void setupWebView(Bundle savedInstanceState) { private void setupWebView(Bundle savedInstanceState) {
webSettings = webView.getSettings(); webSettings = webView.getSettings();
@ -519,6 +558,7 @@ public class MainActivity extends AppCompatActivity
@Override @Override
protected void onRestoreInstanceState(@NonNull Bundle savedInstanceState) { protected void onRestoreInstanceState(@NonNull Bundle savedInstanceState) {
Helpers.printBundle(savedInstanceState,"");
super.onRestoreInstanceState(savedInstanceState); super.onRestoreInstanceState(savedInstanceState);
webView.restoreState(savedInstanceState); webView.restoreState(savedInstanceState);
} }

View file

@ -22,7 +22,9 @@ import android.app.Activity;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle;
import android.os.Environment; import android.os.Environment;
import android.util.Log;
import com.github.dfa.diaspora_android.R; import com.github.dfa.diaspora_android.R;
@ -31,8 +33,10 @@ import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date; import java.util.Date;
import java.util.Locale; import java.util.Locale;
import java.util.Objects;
public class Helpers { public class Helpers {
@ -97,4 +101,22 @@ public class Helpers {
public static String hexColorFromRessourceColor(Context context, int idColor){ public static String hexColorFromRessourceColor(Context context, int idColor){
return "#" + Integer.toHexString(context.getResources().getColor(idColor) & 0x00ffffff); return "#" + Integer.toHexString(context.getResources().getColor(idColor) & 0x00ffffff);
} }
public static void printBundle(Bundle savedInstanceState, String k) {
if(savedInstanceState != null) {
for (String key : savedInstanceState.keySet()) {
Log.d("SAVED", key + " is a key in the bundle "+k);
Object bun = savedInstanceState.get(key);
if(bun != null) {
if (bun instanceof Bundle) {
printBundle((Bundle) bun, k + "." + key);
} else if (bun instanceof byte[]) {
Log.d("SAVED", "Key: "+k + "." + key+": "+ Arrays.toString((byte[])bun));
} else {
Log.d("SAVED", "Key: "+k + "." + key+": "+ bun.toString());
}
}
}
}
}
} }

View file

@ -9,8 +9,8 @@
tools:context=".activity.MainActivity" tools:context=".activity.MainActivity"
tools:showIn="@layout/main__app_bar"> tools:showIn="@layout/main__app_bar">
<com.github.dfa.diaspora_android.ui.ContextMenuWebView <FrameLayout
android:id="@+id/webView" android:id="@+id/placeholder_webview"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:layout_height="fill_parent"
android:layout_alignParentEnd="true" android:layout_alignParentEnd="true"

View file

@ -0,0 +1,13 @@
<?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="match_parent">
<com.github.dfa.diaspora_android.ui.ContextMenuWebView
android:id="@+id/webView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_alignParentEnd="true"
android:layout_alignParentStart="true"
android:layout_centerVertical="true" />
</LinearLayout>