mirror of
https://github.com/gsantner/dandelion
synced 2024-11-25 22:02:08 +01:00
fix keyboard. #4
This commit is contained in:
parent
d60069253e
commit
945d617a52
7 changed files with 22 additions and 121 deletions
|
@ -37,8 +37,7 @@
|
||||||
<activity
|
<activity
|
||||||
android:name=".activity.MainActivity"
|
android:name=".activity.MainActivity"
|
||||||
android:launchMode="singleInstance"
|
android:launchMode="singleInstance"
|
||||||
android:windowSoftInputMode="adjustResize"
|
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">
|
||||||
</activity>
|
</activity>
|
||||||
|
|
|
@ -138,10 +138,11 @@ public class MainActivity extends AppCompatActivity
|
||||||
ContextMenuWebView webView;
|
ContextMenuWebView webView;
|
||||||
|
|
||||||
@BindView(R.id.main__navigaion_view)
|
@BindView(R.id.main__navigaion_view)
|
||||||
NavigationView navigationView;
|
NavigationView navView;
|
||||||
|
|
||||||
|
@BindView(R.id.main__layout)
|
||||||
|
DrawerLayout navDrawer;
|
||||||
|
|
||||||
@BindView(R.id.drawer_layout)
|
|
||||||
DrawerLayout drawer;
|
|
||||||
|
|
||||||
// NavHeader cannot be bound by Butterknife
|
// NavHeader cannot be bound by Butterknife
|
||||||
private TextView navheaderTitle;
|
private TextView navheaderTitle;
|
||||||
|
@ -171,6 +172,7 @@ public class MainActivity extends AppCompatActivity
|
||||||
|
|
||||||
this.registerForContextMenu(webView);
|
this.registerForContextMenu(webView);
|
||||||
webView.setParentActivity(this);
|
webView.setParentActivity(this);
|
||||||
|
webView.setOverScrollMode(WebView.OVER_SCROLL_ALWAYS);
|
||||||
|
|
||||||
// Setup toolbar
|
// Setup toolbar
|
||||||
setSupportActionBar(toolbarTop);
|
setSupportActionBar(toolbarTop);
|
||||||
|
@ -181,7 +183,6 @@ public class MainActivity extends AppCompatActivity
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
// Load app settings
|
// Load app settings
|
||||||
setupNavigationSlider();
|
setupNavigationSlider();
|
||||||
|
|
||||||
|
@ -191,6 +192,7 @@ public class MainActivity extends AppCompatActivity
|
||||||
swipeRefreshLayout.setColorSchemeResources(R.color.colorPrimary,
|
swipeRefreshLayout.setColorSchemeResources(R.color.colorPrimary,
|
||||||
R.color.fab_big);
|
R.color.fab_big);
|
||||||
|
|
||||||
|
// Setup WebView
|
||||||
webView.addJavascriptInterface(new JavaScriptInterface(), "AndroidBridge");
|
webView.addJavascriptInterface(new JavaScriptInterface(), "AndroidBridge");
|
||||||
if (savedInstanceState != null) {
|
if (savedInstanceState != null) {
|
||||||
webView.restoreState(savedInstanceState);
|
webView.restoreState(savedInstanceState);
|
||||||
|
@ -313,14 +315,14 @@ public class MainActivity extends AppCompatActivity
|
||||||
|
|
||||||
private void setupNavigationSlider() {
|
private void setupNavigationSlider() {
|
||||||
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
|
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
|
||||||
this, drawer, toolbarTop, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
|
this, navDrawer, toolbarTop, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
|
||||||
drawer.addDrawerListener(toggle);
|
navDrawer.addDrawerListener(toggle);
|
||||||
toggle.syncState();
|
toggle.syncState();
|
||||||
|
|
||||||
//NavigationView navigationView = ButterKnife.findById(this, R.id.nav_view);
|
//NavigationView navView = ButterKnife.findById(this, R.id.nav_view);
|
||||||
navigationView.setNavigationItemSelectedListener(this);
|
navView.setNavigationItemSelectedListener(this);
|
||||||
|
|
||||||
View navHeader = navigationView.getHeaderView(0);
|
View navHeader = navView.getHeaderView(0);
|
||||||
navheaderTitle = ButterKnife.findById(navHeader, R.id.navheader_title);
|
navheaderTitle = ButterKnife.findById(navHeader, R.id.navheader_title);
|
||||||
navheaderDescription = ButterKnife.findById(navHeader, R.id.podselection__podupti_notice);
|
navheaderDescription = ButterKnife.findById(navHeader, R.id.podselection__podupti_notice);
|
||||||
navheaderImage = ButterKnife.findById(navHeader, R.id.navheader_user_image);
|
navheaderImage = ButterKnife.findById(navHeader, R.id.navheader_user_image);
|
||||||
|
@ -342,7 +344,7 @@ public class MainActivity extends AppCompatActivity
|
||||||
|
|
||||||
@OnClick(R.id.toolbar)
|
@OnClick(R.id.toolbar)
|
||||||
public void onToolBarClicked(View view) {
|
public void onToolBarClicked(View view) {
|
||||||
onNavigationItemSelected(navigationView.getMenu().findItem(R.id.nav_stream));
|
onNavigationItemSelected(navView.getMenu().findItem(R.id.nav_stream));
|
||||||
}
|
}
|
||||||
|
|
||||||
private File createImageFile() throws IOException {
|
private File createImageFile() throws IOException {
|
||||||
|
@ -403,8 +405,8 @@ public class MainActivity extends AppCompatActivity
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onBackPressed() {
|
public void onBackPressed() {
|
||||||
if (drawer.isDrawerOpen(navigationView)) {
|
if (navDrawer.isDrawerOpen(navView)) {
|
||||||
drawer.closeDrawer(navigationView);
|
navDrawer.closeDrawer(navView);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1035,7 +1037,7 @@ public class MainActivity extends AppCompatActivity
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
|
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.main__layout);
|
||||||
drawer.closeDrawer(GravityCompat.START);
|
drawer.closeDrawer(GravityCompat.START);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,9 +20,6 @@
|
||||||
package com.github.dfa.diaspora_android.activity;
|
package com.github.dfa.diaspora_android.activity;
|
||||||
|
|
||||||
import android.annotation.SuppressLint;
|
import android.annotation.SuppressLint;
|
||||||
import android.annotation.TargetApi;
|
|
||||||
import android.app.AlertDialog;
|
|
||||||
import android.content.DialogInterface;
|
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
|
@ -33,8 +30,6 @@ import android.support.design.widget.Snackbar;
|
||||||
import android.support.v4.widget.SwipeRefreshLayout;
|
import android.support.v4.widget.SwipeRefreshLayout;
|
||||||
import android.support.v7.widget.Toolbar;
|
import android.support.v7.widget.Toolbar;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.Menu;
|
|
||||||
import android.view.MenuItem;
|
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.webkit.ValueCallback;
|
import android.webkit.ValueCallback;
|
||||||
import android.webkit.WebChromeClient;
|
import android.webkit.WebChromeClient;
|
||||||
|
@ -50,7 +45,6 @@ import com.github.dfa.diaspora_android.util.Helpers;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
public class ShareActivity extends MainActivity {
|
public class ShareActivity extends MainActivity {
|
||||||
|
@ -163,7 +157,7 @@ public class ShareActivity extends MainActivity {
|
||||||
takePictureIntent.putExtra("PhotoPath", mCameraPhotoPath);
|
takePictureIntent.putExtra("PhotoPath", mCameraPhotoPath);
|
||||||
} catch (IOException ex) {
|
} catch (IOException ex) {
|
||||||
// Error occurred while creating the File
|
// Error occurred while creating the File
|
||||||
Snackbar.make(getWindow().findViewById(R.id.drawer_layout), "Unable to get image", Snackbar.LENGTH_LONG).show();
|
Snackbar.make(getWindow().findViewById(R.id.main__layout), "Unable to get image", Snackbar.LENGTH_LONG).show();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Continue only if the File was successfully created
|
// Continue only if the File was successfully created
|
||||||
|
@ -202,7 +196,7 @@ public class ShareActivity extends MainActivity {
|
||||||
if (Helpers.isOnline(ShareActivity.this)) {
|
if (Helpers.isOnline(ShareActivity.this)) {
|
||||||
webView.loadUrl("https://" + podDomain + "/status_messages/new");
|
webView.loadUrl("https://" + podDomain + "/status_messages/new");
|
||||||
} else {
|
} else {
|
||||||
Snackbar.make(getWindow().findViewById(R.id.drawer_layout), R.string.no_internet, Snackbar.LENGTH_LONG).show();
|
Snackbar.make(getWindow().findViewById(R.id.main__layout), R.string.no_internet, Snackbar.LENGTH_LONG).show();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,95 +0,0 @@
|
||||||
package com.github.dfa.diaspora_android.listener;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Created by juergen on 25.03.16. Part of Diaspora for Android.
|
|
||||||
* solution found on: http://stackoverflow.com/questions/2150078/how-to-check-visibility-of-software-keyboard-in-android
|
|
||||||
*/
|
|
||||||
|
|
||||||
import android.graphics.Rect;
|
|
||||||
import android.view.View;
|
|
||||||
import android.view.ViewTreeObserver;
|
|
||||||
|
|
||||||
import java.util.LinkedList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public class SoftKeyboardStateWatcher implements ViewTreeObserver.OnGlobalLayoutListener {
|
|
||||||
|
|
||||||
private final List<SoftKeyboardStateListener> listeners = new LinkedList<>();
|
|
||||||
private final View activityRootView;
|
|
||||||
private int lastSoftKeyboardHeightInPx;
|
|
||||||
private boolean isSoftKeyboardOpened;
|
|
||||||
public SoftKeyboardStateWatcher(View activityRootView) {
|
|
||||||
this(activityRootView, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
public SoftKeyboardStateWatcher(View activityRootView, boolean isSoftKeyboardOpened) {
|
|
||||||
this.activityRootView = activityRootView;
|
|
||||||
this.isSoftKeyboardOpened = isSoftKeyboardOpened;
|
|
||||||
activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onGlobalLayout() {
|
|
||||||
final Rect r = new Rect();
|
|
||||||
//r will be populated with the coordinates of your view that area still visible.
|
|
||||||
activityRootView.getWindowVisibleDisplayFrame(r);
|
|
||||||
|
|
||||||
final int heightDiff = activityRootView.getRootView().getHeight() - (r.bottom - r.top);
|
|
||||||
if (!isSoftKeyboardOpened && heightDiff > 100) { // if more than 100 pixels, its probably a keyboard...
|
|
||||||
isSoftKeyboardOpened = true;
|
|
||||||
notifyOnSoftKeyboardOpened(heightDiff);
|
|
||||||
} else if (isSoftKeyboardOpened && heightDiff < 100) {
|
|
||||||
isSoftKeyboardOpened = false;
|
|
||||||
notifyOnSoftKeyboardClosed();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setIsSoftKeyboardOpened(boolean isSoftKeyboardOpened) {
|
|
||||||
this.isSoftKeyboardOpened = isSoftKeyboardOpened;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isSoftKeyboardOpened() {
|
|
||||||
return isSoftKeyboardOpened;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Default value is zero {@code 0}.
|
|
||||||
*
|
|
||||||
* @return last saved keyboard height in px
|
|
||||||
*/
|
|
||||||
public int getLastSoftKeyboardHeightInPx() {
|
|
||||||
return lastSoftKeyboardHeightInPx;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void addSoftKeyboardStateListener(SoftKeyboardStateListener listener) {
|
|
||||||
listeners.add(listener);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void removeSoftKeyboardStateListener(SoftKeyboardStateListener listener) {
|
|
||||||
listeners.remove(listener);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void notifyOnSoftKeyboardOpened(int keyboardHeightInPx) {
|
|
||||||
this.lastSoftKeyboardHeightInPx = keyboardHeightInPx;
|
|
||||||
|
|
||||||
for (SoftKeyboardStateListener listener : listeners) {
|
|
||||||
if (listener != null) {
|
|
||||||
listener.onSoftKeyboardOpened(keyboardHeightInPx);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void notifyOnSoftKeyboardClosed() {
|
|
||||||
for (SoftKeyboardStateListener listener : listeners) {
|
|
||||||
if (listener != null) {
|
|
||||||
listener.onSoftKeyboardClosed();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public interface SoftKeyboardStateListener {
|
|
||||||
void onSoftKeyboardOpened(int keyboardHeightInPx);
|
|
||||||
|
|
||||||
void onSoftKeyboardClosed();
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -51,6 +51,8 @@ public class Helpers {
|
||||||
|
|
||||||
public static void hideTopBar(final WebView wv) {
|
public static void hideTopBar(final WebView wv) {
|
||||||
wv.loadUrl("javascript: ( function() {" +
|
wv.loadUrl("javascript: ( function() {" +
|
||||||
|
" document.documentElement.style.paddingBottom = '260px';" +
|
||||||
|
" document.getElementById('main').style.paddingTop = '5px';" +
|
||||||
" if(document.getElementById('main_nav')) {" +
|
" if(document.getElementById('main_nav')) {" +
|
||||||
" document.getElementById('main_nav').parentNode.removeChild(" +
|
" document.getElementById('main_nav').parentNode.removeChild(" +
|
||||||
" document.getElementById('main_nav'));" +
|
" document.getElementById('main_nav'));" +
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<android.support.v4.widget.DrawerLayout 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"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
android:id="@+id/drawer_layout"
|
android:id="@+id/main__layout"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:fitsSystemWindows="true"
|
android:fitsSystemWindows="true"
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<android.support.design.widget.CoordinatorLayout 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:fab="http://schemas.android.com/apk/res-auto"
|
|
||||||
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"
|
||||||
|
@ -26,7 +25,7 @@
|
||||||
|
|
||||||
<android.support.design.widget.AppBarLayout
|
<android.support.design.widget.AppBarLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_gravity="bottom|end"
|
android:layout_gravity="bottom"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:theme="@style/AppTheme.AppBarOverlay">
|
android:theme="@style/AppTheme.AppBarOverlay">
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue