diff --git a/.idea/misc.xml b/.idea/misc.xml index fbb68289..5d199810 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -37,7 +37,7 @@ - + diff --git a/app/build.gradle b/app/build.gradle index 905abd11..88aecec1 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ android { applicationId "de.baumann.diaspora" minSdkVersion 15 targetSdkVersion 23 - versionCode 15 - versionName "1.2" + versionCode 16 + versionName "1.2.1" } buildTypes { release { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6c78789b..ffa190a2 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -56,6 +56,22 @@ + + + + + + + + + . + */ + +package de.baumann.diaspora; + +import android.annotation.SuppressLint; +import android.app.Activity; +import android.app.AlertDialog; +import android.content.Intent; +import android.content.SharedPreferences; +import android.net.Uri; +import android.os.Build; +import android.os.Bundle; +import android.os.Environment; +import android.provider.MediaStore; +import android.support.design.widget.Snackbar; +import android.support.v4.widget.SwipeRefreshLayout; +import android.support.v7.widget.Toolbar; +import android.util.Log; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.webkit.JsResult; +import android.webkit.ValueCallback; +import android.webkit.WebChromeClient; +import android.webkit.WebSettings; +import android.webkit.WebView; +import android.webkit.WebViewClient; +import android.widget.ProgressBar; + +import java.io.File; +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.Date; + +import de.baumann.diaspora.utils.Helpers; + +public class ShareActivity2 extends MainActivity { + + private WebView webView; + private static final String TAG = "Diaspora Share"; + private String podDomain; + private ValueCallback mFilePathCallback; + private String mCameraPhotoPath; + private com.getbase.floatingactionbutton.FloatingActionsMenu fab; + private ProgressBar progressBar; + private SwipeRefreshLayout swipeView; + + @SuppressLint("SetJavaScriptEnabled") + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setContentView(R.layout.activity_main); + Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); + setSupportActionBar(toolbar); + + progressBar = (ProgressBar)findViewById(R.id.progressBar); + + swipeView = (SwipeRefreshLayout) findViewById(R.id.swipe); + swipeView.setColorSchemeResources(R.color.colorPrimary, + R.color.fab_big); + + toolbar.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + if (Helpers.isOnline(ShareActivity2.this)) { + Intent intent = new Intent(ShareActivity2.this, MainActivity.class); + startActivityForResult(intent, 100); + overridePendingTransition(0, 0); + } else { + Snackbar.make(swipeView, R.string.no_internet, Snackbar.LENGTH_INDEFINITE).show(); + } + } + }); + + + SharedPreferences config = getSharedPreferences("PodSettings", MODE_PRIVATE); + podDomain = config.getString("podDomain", null); + + fab = (com.getbase.floatingactionbutton.FloatingActionsMenu) findViewById(R.id.multiple_actions); + fab.setVisibility(View.GONE); + + webView = (WebView)findViewById(R.id.webView); + webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY); + + WebSettings wSettings = webView.getSettings(); + wSettings.setJavaScriptEnabled(true); + wSettings.setBuiltInZoomControls(true); + + if (Build.VERSION.SDK_INT >= 21) + wSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); + + /* + * WebViewClient + */ + webView.setWebViewClient(new WebViewClient() { + public boolean shouldOverrideUrlLoading(WebView view, String url) { + Log.d(TAG, url); + if (!url.contains(podDomain)) { + Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); + startActivity(i); + return true; + } + return false; + + } + + public void onPageFinished(WebView view, String url) { + Log.i(TAG, "Finished loading URL: " + url); + } + + public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { + Log.e(TAG, "Error: " + description); + + new AlertDialog.Builder(ShareActivity2.this) + .setIcon(android.R.drawable.ic_dialog_alert) + .setMessage(description) + .setPositiveButton("CLOSE", null) + .show(); + } + }); + + swipeView.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { + @Override + public void onRefresh() { + if (Helpers.isOnline(ShareActivity2.this)) { + webView.reload(); + } else { + Snackbar.make(swipeView, R.string.no_internet, Snackbar.LENGTH_INDEFINITE).show(); + swipeView.setRefreshing(false); + } + } + }); + + + /* + * WebChromeClient + */ + webView.setWebChromeClient(new WebChromeClient() { + + public void onProgressChanged(WebView wv, int progress) { + progressBar.setProgress(progress); + + if (progress > 0 && progress <= 60) { + Helpers.getNotificationCount(wv); + } + + if (progress > 60) { + Helpers.hideTopBar(wv); + } + + if (progress == 100) { + progressBar.setVisibility(View.GONE); + } else { + progressBar.setVisibility(View.VISIBLE); + } + } + + @Override + public boolean onShowFileChooser(WebView webView, ValueCallback filePathCallback, FileChooserParams fileChooserParams) { + if (mFilePathCallback != null) mFilePathCallback.onReceiveValue(null); + + mFilePathCallback = filePathCallback; + + Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); + if (takePictureIntent.resolveActivity(getPackageManager()) != null) { + // Create the File where the photo should go + File photoFile = null; + try { + photoFile = createImageFile(); + takePictureIntent.putExtra("PhotoPath", mCameraPhotoPath); + } catch (IOException ex) { + // Error occurred while creating the File + Snackbar.make(getWindow().findViewById(R.id.drawer_layout), "Unable to get image", Snackbar.LENGTH_SHORT).show(); + } + + // Continue only if the File was successfully created + if (photoFile != null) { + mCameraPhotoPath = "file:" + photoFile.getAbsolutePath(); + takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, + Uri.fromFile(photoFile)); + } else { + takePictureIntent = null; + } + } + + Intent contentSelectionIntent = new Intent(Intent.ACTION_GET_CONTENT); + contentSelectionIntent.addCategory(Intent.CATEGORY_OPENABLE); + contentSelectionIntent.setType("image/*"); + + Intent[] intentArray; + if (takePictureIntent != null) { + intentArray = new Intent[]{takePictureIntent}; + } else { + intentArray = new Intent[0]; + } + + Intent chooserIntent = new Intent(Intent.ACTION_CHOOSER); + chooserIntent.putExtra(Intent.EXTRA_INTENT, contentSelectionIntent); + chooserIntent.putExtra(Intent.EXTRA_TITLE, "Image Chooser"); + chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, intentArray); + + startActivityForResult(chooserIntent, INPUT_FILE_REQUEST_CODE); + + return true; + } + + public boolean onJsAlert(WebView view, String url, String message, JsResult result) { + return super.onJsAlert(view, url, message, result); + } + }); + + + + + Intent intent = getIntent(); + final Bundle extras = intent.getExtras(); + String action = intent.getAction(); + + if (Intent.ACTION_SEND.equals(action)) { + webView.setWebViewClient(new WebViewClient() { + + public void onPageFinished(WebView view, String url) { + + if (extras.containsKey(Intent.EXTRA_TEXT) && extras.containsKey(Intent.EXTRA_SUBJECT)) { + final String extraText = (String) extras.get(Intent.EXTRA_TEXT); + final String extraSubject = (String) extras.get(Intent.EXTRA_SUBJECT); + + webView.setWebViewClient(new WebViewClient() { + @Override + public boolean shouldOverrideUrlLoading(WebView view, String url) { + + finish(); + + Intent i = new Intent(ShareActivity2.this, MainActivity.class); + i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + startActivity(i); + overridePendingTransition(0, 0); + + return false; + } + }); + + webView.loadUrl("javascript:(function() { " + + "document.getElementsByTagName('textarea')[0].style.height='110px'; " + + "document.getElementsByTagName('textarea')[0].innerHTML = '**[" + extraSubject + "]** " + extraText + " *[shared with #DiasporaWebApp]*'; " + + " if(document.getElementById(\"main_nav\")) {" + + " document.getElementById(\"main_nav\").parentNode.removeChild(" + + " document.getElementById(\"main_nav\"));" + + " } else if (document.getElementById(\"main-nav\")) {" + + " document.getElementById(\"main-nav\").parentNode.removeChild(" + + " document.getElementById(\"main-nav\"));" + + " }" + + "})();"); + + } + } + }); + } + + if (savedInstanceState == null) { + if (Helpers.isOnline(ShareActivity2.this)) { + webView.loadUrl("https://"+podDomain+"/status_messages/new"); + } else { + Snackbar.make(getWindow().findViewById(R.id.drawer_layout), R.string.no_internet, Snackbar.LENGTH_SHORT).show(); + } + } + + } + + + @Override + public void onActivityResult (int requestCode, int resultCode, Intent data) { + if(requestCode != INPUT_FILE_REQUEST_CODE || mFilePathCallback == null) { + super.onActivityResult(requestCode, resultCode, data); + return; + } + Uri[] results = null; + if(resultCode == Activity.RESULT_OK) { + if(data == null) { + if(mCameraPhotoPath != null) { + results = new Uri[]{Uri.parse(mCameraPhotoPath)}; + } + } else { + String dataString = data.getDataString(); + if (dataString != null) { + results = new Uri[]{Uri.parse(dataString)}; + } + } + } + + mFilePathCallback.onReceiveValue(results); + mFilePathCallback = null; + } + + private File createImageFile() throws IOException { + String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); + String imageFileName = "JPEG_" + timeStamp + "_"; + File storageDir = Environment.getExternalStoragePublicDirectory( + Environment.DIRECTORY_PICTURES); + return File.createTempFile( + imageFileName, /* prefix */ + ".jpg", /* suffix */ + storageDir /* directory */ + ); + } + + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.menu_compose, menu); + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + int id = item.getItemId(); + + if (id == R.id.reload) { + if (Helpers.isOnline(ShareActivity2.this)) { + webView.reload(); + return true; + } else { + Snackbar.make(getWindow().findViewById(R.id.drawer_layout), R.string.no_internet, Snackbar.LENGTH_SHORT).show(); + return false; + } + } + + return super.onOptionsItemSelected(item); + } + + @Override + public void onBackPressed() { + fab.collapse(); + if (webView.canGoBack()) { + webView.goBack(); + setTitle(R.string.app_name); + Snackbar snackbar = Snackbar + .make(swipeView, R.string.confirm_exit, Snackbar.LENGTH_LONG) + .setAction(R.string.yes, new View.OnClickListener() { + @Override + public void onClick(View view) { + moveTaskToBack(true); + } + }); + snackbar.show(); + } else { + Snackbar snackbar = Snackbar + .make(swipeView, R.string.confirm_exit, Snackbar.LENGTH_LONG) + .setAction(R.string.yes, new View.OnClickListener() { + @Override + public void onClick(View view) { + finish(); + } + }); + snackbar.show(); + } + } + +} \ No newline at end of file diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 33e5eba9..5ff6bdcd 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -58,7 +58,7 @@ //Dialog Unterhaltungen - Neuer Beitrag + Nur Text Benachrichtigungen Schriftgröße ändern Bilder laden umschalten @@ -154,5 +154,6 @@ along with this program. If not, see http://www.gnu.org/licenses.<br> <br Ungelesene Unterhaltung. Öffnen? Ungelesene Benachrichtigung. Lesen? Changelog + Titel und Text diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 3f727715..b01e8da5 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -31,7 +31,8 @@ YES NO This will erase all cookies and session data. Do you really want to change pods? - New + Text only + Title and text Notifications Conversations