From 08e2849a36c7d407361dd5dc15f1db521a868dfd Mon Sep 17 00:00:00 2001 From: vanitasvitae Date: Tue, 2 Aug 2016 23:58:36 +0200 Subject: [PATCH] removed ShareActivity, moved sharing code to MainActivity, made adding shared-by-notice toggleable --- app/src/main/AndroidManifest.xml | 27 +- .../activity/MainActivity.java | 90 ++++- .../activity/ShareActivity.java | 374 ------------------ .../diaspora_android/data/AppSettings.java | 4 + .../ui/ContextMenuWebView.java | 2 - .../res/values-de/strings-preferences.xml | 2 + .../main/res/values/strings-preferences.xml | 4 +- app/src/main/res/xml/preferences.xml | 6 + 8 files changed, 108 insertions(+), 401 deletions(-) delete mode 100644 app/src/main/java/com/github/dfa/diaspora_android/activity/ShareActivity.java diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d7723f2d..68c0e928 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -42,27 +42,6 @@ android:label="@string/pref_title__personal_settings"> - - - - - - - - - - + + + + + + diff --git a/app/src/main/java/com/github/dfa/diaspora_android/activity/MainActivity.java b/app/src/main/java/com/github/dfa/diaspora_android/activity/MainActivity.java index eccd3c45..c4a244eb 100644 --- a/app/src/main/java/com/github/dfa/diaspora_android/activity/MainActivity.java +++ b/app/src/main/java/com/github/dfa/diaspora_android/activity/MainActivity.java @@ -69,6 +69,7 @@ import android.webkit.ValueCallback; import android.webkit.WebChromeClient; import android.webkit.WebSettings; import android.webkit.WebView; +import android.webkit.WebViewClient; import android.widget.EditText; import android.widget.ImageView; import android.widget.LinearLayout; @@ -381,7 +382,6 @@ public class MainActivity extends AppCompatActivity chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, intentArray); startActivityForResult(chooserIntent, INPUT_FILE_REQUEST_CODE); - return true; } }); @@ -447,6 +447,7 @@ public class MainActivity extends AppCompatActivity } String action = intent.getAction(); + String type = intent.getType(); String loadUrl = null; @@ -459,6 +460,20 @@ public class MainActivity extends AppCompatActivity Helpers.animateToActivity(MainActivity.this, PodSelectionActivity.class, true); } else if (ACTION_CLEAR_CACHE.equals(action)) { webView.clearCache(true); + } else if (Intent.ACTION_SEND.equals(action) && type != null) { + switch (type) { + case "text/plain": + if (intent.hasExtra(Intent.EXTRA_SUBJECT)) { + handleSendSubject(intent); + } else { + handleSendText(intent);} + break; + case "image/*": + handleSendImage(intent); //TODO: Add intent filter to Manifest and implement method + break; + } + } else if (Intent.ACTION_SEND_MULTIPLE.equals(action) && type != null) { + //TODO: Implement and add filter to manifest } if (loadUrl != null) { @@ -539,10 +554,8 @@ public class MainActivity extends AppCompatActivity @Override public void onReceive(Context context, Intent intent) { String url = intent.getStringExtra(EXTRA_URL); - // Log.d(App.TAG, "BroadcastReceiver: Received setTitleIntent: "+url); if (url != null && url.startsWith("https://" + podDomain)) { String subUrl = url.substring(("https://" + podDomain).length()); - //Log.d(App.TAG, "LocalBroadcastReceiver: SubUrl: "+subUrl); // Spams! if (subUrl.startsWith("/stream")) { setTitle(R.string.title_stream); } else if (subUrl.startsWith("/posts/")) { @@ -831,6 +844,77 @@ public class MainActivity extends AppCompatActivity app.getAvatarImageLoader().startImageDownload(navheaderImage, avatarUrl); } + void handleSendText(Intent intent) { + webView.loadUrl("https://"+podDomain+"/status_messages/new"); + String content = intent.getStringExtra(Intent.EXTRA_TEXT); + if(appSettings.isAppendSharedViaApp()) { + //TODO: Make \n work + content = content + " \n" +getString(R.string.shared_by_diaspora_android); + } + final String sharedText = content; + if (sharedText != null) { + webView.setWebViewClient(new WebViewClient() { + public void onPageFinished(WebView view, String url) { + webView.loadUrl("javascript:(function() { " + + "document.getElementsByTagName('textarea')[0].style.height='110px'; " + + "document.getElementsByTagName('textarea')[0].innerHTML = '" + sharedText + "'; " + + " 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\"));" + + " }" + + "})();"); + webView.setWebViewClient(webViewClient); + } + }); + } + } + + /** + * Handle sent text + subject + * @param intent + */ + void handleSendSubject(Intent intent) { + webView.loadUrl("https://"+podDomain+"/status_messages/new"); + String content = intent.getStringExtra(Intent.EXTRA_TEXT); + final String sharedSubject = intent.getStringExtra(Intent.EXTRA_SUBJECT); + if (appSettings.isAppendSharedViaApp()) { + //TODO: Make \n work + content = content + " \n" + getString(R.string.shared_by_diaspora_android); + } + final String sharedText = content; + if (sharedSubject != null) { + webView.setWebViewClient(new WebViewClient() { + + public void onPageFinished(WebView view, String url) { + webView.loadUrl("javascript:(function() { " + + "document.getElementsByTagName('textarea')[0].style.height='110px'; " + + "document.getElementsByTagName('textarea')[0].innerHTML = '**" + sharedSubject + "** " + sharedText + "'; " + + " 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\"));" + + " }" + + "})();"); + webView.setWebViewClient(webViewClient); + } + }); + } + } + + //TODO: Implement? + private void handleSendImage(Intent intent) { + final Uri imageUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM); + if (imageUri != null) { + // Update UI to reflect text being shared + } + Toast.makeText(this, "Not yet implemented.", Toast.LENGTH_SHORT).show(); + } + // TODO: Move from Javascript interface @Override public void onNotificationCountChanged(int notificationCount) { diff --git a/app/src/main/java/com/github/dfa/diaspora_android/activity/ShareActivity.java b/app/src/main/java/com/github/dfa/diaspora_android/activity/ShareActivity.java deleted file mode 100644 index b26680db..00000000 --- a/app/src/main/java/com/github/dfa/diaspora_android/activity/ShareActivity.java +++ /dev/null @@ -1,374 +0,0 @@ -/* - This file is part of the Diaspora for Android. - - Diaspora for Android is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - Diaspora for Android is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with the Diaspora for Android. - - If not, see . - */ - -package com.github.dfa.diaspora_android.activity; - -import android.annotation.SuppressLint; -import android.content.Intent; -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.View; -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 com.github.dfa.diaspora_android.App; -import com.github.dfa.diaspora_android.R; -import com.github.dfa.diaspora_android.util.Helpers; - -import java.io.File; -import java.io.IOException; -import java.text.SimpleDateFormat; -import java.util.Date; - -public class ShareActivity extends MainActivity { - - private static final String TAG = "Diaspora Share"; - private WebView webView; - private String podDomain; - private ValueCallback mFilePathCallback; - private String mCameraPhotoPath; - private ProgressBar progressBar; - private SwipeRefreshLayout swipeView; - - @SuppressLint("SetJavaScriptEnabled") - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - setContentView(R.layout.main__activity); - Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); - setSupportActionBar(toolbar); - if (toolbar != null) { - toolbar.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - if (Helpers.isOnline(ShareActivity.this)) { - Intent intent = new Intent(ShareActivity.this, MainActivity.class); - startActivityForResult(intent, 100); - overridePendingTransition(0, 0); - finish(); - } else { - Snackbar.make(swipeView, R.string.no_internet, Snackbar.LENGTH_LONG).show(); - } - } - }); - } - setTitle(R.string.new_post); - - progressBar = (ProgressBar) findViewById(R.id.progressBar); - - swipeView = (SwipeRefreshLayout) findViewById(R.id.swipe); - swipeView.setEnabled(false); - - podDomain = ((App) getApplication()).getSettings().getPodDomain(); - - 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); - } - }); - - - /* - * 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.applyDiasporaMobileSiteChanges(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.main__layout), "Unable to get image", Snackbar.LENGTH_LONG).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; - } - }); - - if (savedInstanceState == null) { - if (Helpers.isOnline(ShareActivity.this)) { - webView.loadUrl("https://" + podDomain + "/status_messages/new"); - } else { - Snackbar.make(getWindow().findViewById(R.id.main__layout), R.string.no_internet, Snackbar.LENGTH_LONG).show(); - } - } - - Intent intent = getIntent(); - String action = intent.getAction(); - String type = intent.getType(); - - if (Intent.ACTION_SEND.equals(action) && type != null) { - if ("text/plain".equals(type)) { - if (intent.hasExtra(Intent.EXTRA_SUBJECT)) { - handleSendSubject(intent); - } else { - handleSendText(intent);} - } else if (type.startsWith("image/")) { - // TODO Handle single image being sent -> see manifest - handleSendImage(intent); - } - //} else { - // Handle other intents, such as being started from the home screen - } - - } - - void handleSendText(Intent intent) { - final String sharedText = intent.getStringExtra(Intent.EXTRA_TEXT); - final String sharedBy = getString(R.string.shared_by_diaspora_android); - - if (sharedText != null) { - webView.setWebViewClient(new WebViewClient() { - - public void onPageFinished(WebView view, String url) { - - webView.setWebViewClient(new WebViewClient() { - @Override - public boolean shouldOverrideUrlLoading(WebView view, String url) { - - finish(); - - Intent i = new Intent(ShareActivity.this, MainActivity.class); - i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - startActivity(i); - - return false; - } - }); - - webView.loadUrl("javascript:(function() { " + - "document.getElementsByTagName('textarea')[0].style.height='110px'; " + - "document.getElementsByTagName('textarea')[0].innerHTML = '> " + sharedText + " " + sharedBy + "'; " + - " 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\"));" + - " }" + - "})();"); - } - }); - } - } - - void handleSendSubject(Intent intent) { - final String sharedText = intent.getStringExtra(Intent.EXTRA_TEXT); - final String sharedSubject = intent.getStringExtra(Intent.EXTRA_SUBJECT); - final String sharedBy = getString(R.string.shared_by_diaspora_android); - if (sharedSubject != null) { - webView.setWebViewClient(new WebViewClient() { - - public void onPageFinished(WebView view, String url) { - - webView.setWebViewClient(new WebViewClient() { - @Override - public boolean shouldOverrideUrlLoading(WebView view, String url) { - - finish(); - - Intent i = new Intent(ShareActivity.this, MainActivity.class); - i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - startActivity(i); - - return false; - } - }); - - webView.loadUrl("javascript:(function() { " + - "document.getElementsByTagName('textarea')[0].style.height='110px'; " + - "document.getElementsByTagName('textarea')[0].innerHTML = '**" + sharedSubject + "** " + sharedText + " " + sharedBy + "'; " + - " 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\"));" + - " }" + - "})();"); - } - }); - } - } - - // TODO Handle single image being sent -> see manifest - - void handleSendImage(Intent intent) { - final Uri imageUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM); - if (imageUri != null) { - // Update UI to reflect text being shared - } - } - - @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 == 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 void onBackPressed() { - if (webView.canGoBack()) { - webView.goBack(); - setTitle(R.string.app_name); - Snackbar snackbar = Snackbar - .make(swipeView, R.string.confirm_exit, Snackbar.LENGTH_LONG) - .setAction(android.R.string.yes, new View.OnClickListener() { - @Override - public void onClick(View view) { - finish(); - } - }); - snackbar.show(); - } else { - Snackbar snackbar = Snackbar - .make(swipeView, R.string.confirm_exit, Snackbar.LENGTH_LONG) - .setAction(android.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/java/com/github/dfa/diaspora_android/data/AppSettings.java b/app/src/main/java/com/github/dfa/diaspora_android/data/AppSettings.java index f7b37868..938e8bfd 100644 --- a/app/src/main/java/com/github/dfa/diaspora_android/data/AppSettings.java +++ b/app/src/main/java/com/github/dfa/diaspora_android/data/AppSettings.java @@ -174,6 +174,10 @@ public class AppSettings { setStringArray(prefPod, R.string.pref_key__podprofile_followed_tags, tags); } + public boolean isAppendSharedViaApp() { + return getBoolean(prefApp, R.string.pref_key__append_shared_via_app, true); + } + @SuppressLint("CommitPrefEdits") public void setProxyEnabled(boolean enabled) { //commit instead of apply because the app is likely to be killed before apply is called. diff --git a/app/src/main/java/com/github/dfa/diaspora_android/ui/ContextMenuWebView.java b/app/src/main/java/com/github/dfa/diaspora_android/ui/ContextMenuWebView.java index b3758dad..de07cfdd 100644 --- a/app/src/main/java/com/github/dfa/diaspora_android/ui/ContextMenuWebView.java +++ b/app/src/main/java/com/github/dfa/diaspora_android/ui/ContextMenuWebView.java @@ -33,12 +33,10 @@ import android.net.Uri; import android.os.Environment; import android.support.v4.content.LocalBroadcastManager; import android.util.AttributeSet; -import android.util.Log; import android.view.ContextMenu; import android.view.MenuItem; import android.widget.Toast; -import com.github.dfa.diaspora_android.App; import com.github.dfa.diaspora_android.R; import com.github.dfa.diaspora_android.activity.MainActivity; import com.github.dfa.diaspora_android.task.ImageDownloadTask; diff --git a/app/src/main/res/values-de/strings-preferences.xml b/app/src/main/res/values-de/strings-preferences.xml index e927b97f..50dcc339 100644 --- a/app/src/main/res/values-de/strings-preferences.xml +++ b/app/src/main/res/values-de/strings-preferences.xml @@ -44,4 +44,6 @@ Toolbars intelligent verstecken Obere und untere Toolbar verstecken während des Scrollens von Inhalt + Verweise auf App + Füge beim Teilen von Texten Verweis auf diese App an ("geteilt durch…") diff --git a/app/src/main/res/values/strings-preferences.xml b/app/src/main/res/values/strings-preferences.xml index 216c0241..3fc7df09 100644 --- a/app/src/main/res/values/strings-preferences.xml +++ b/app/src/main/res/values/strings-preferences.xml @@ -14,7 +14,7 @@ pref_key_category_network pref_key_load_images pref_key_clear_cache - + pref_key_append_shared_via_app pref_key_proxy_enabled pref_key_proxy_host pref_key_proxy_port @@ -81,4 +81,6 @@ Hide top and bottom toolbars automatically while scrolling Intellihide Toolbars + Append shared-by-notice + Append a reference to this app ("shared by…") to shared texts \ No newline at end of file diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index df6eba30..f1c8778a 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -18,6 +18,12 @@ android:summary="@string/pref_desc__intellihide_toolbars" android:title="@string/pref_title__intellihide_toolbars"/> + +