Revised link handling

pull/161/head
M66B 6 years ago
parent 0694725813
commit 7d6a780f25

@ -82,7 +82,7 @@
<activity <activity
android:name=".ActivitySetup" android:name=".ActivitySetup"
android:exported="true" android:exported="true"
android:launchMode="singleInstance" android:launchMode="singleTop"
android:parentActivityName=".ActivityMain"> android:parentActivityName=".ActivityMain">
<intent-filter> <intent-filter>
@ -157,7 +157,8 @@
android:name=".ActivityEml" android:name=".ActivityEml"
android:exported="true" android:exported="true"
android:icon="@mipmap/ic_launcher" android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"> android:label="@string/app_name"
android:launchMode="singleTop">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.VIEW" /> <action android:name="android.intent.action.VIEW" />
@ -191,7 +192,8 @@
android:name=".ActivityDSN" android:name=".ActivityDSN"
android:exported="true" android:exported="true"
android:icon="@mipmap/ic_launcher" android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"> android:label="@string/app_name"
android:launchMode="singleTop">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.VIEW" /> <action android:name="android.intent.action.VIEW" />
@ -211,7 +213,7 @@
android:name=".ActivityBilling" android:name=".ActivityBilling"
android:icon="@mipmap/ic_launcher" android:icon="@mipmap/ic_launcher"
android:label="@string/app_name" android:label="@string/app_name"
android:launchMode="singleInstance" /> android:launchMode="singleTop" />
<service <service
android:name=".ServiceSynchronize" android:name=".ServiceSynchronize"

@ -229,7 +229,6 @@ public class ActivitySetup extends ActivityBase implements FragmentManager.OnBac
} }
})); }));
if (Helper.getIntentFAQ().resolveActivity(pm) != null)
menus.add(new NavMenuItem(R.drawable.baseline_question_answer_24, R.string.menu_faq, new Runnable() { menus.add(new NavMenuItem(R.drawable.baseline_question_answer_24, R.string.menu_faq, new Runnable() {
@Override @Override
public void run() { public void run() {
@ -499,7 +498,7 @@ public class ActivitySetup extends ActivityBase implements FragmentManager.OnBac
} }
private void onMenuFAQ() { private void onMenuFAQ() {
Helper.view(this, Helper.getIntentFAQ()); Helper.viewFAQ(this, 0);
} }
private void onMenuPrivacy() { private void onMenuPrivacy() {

@ -295,7 +295,6 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB
} }
})); }));
if (Helper.getIntentFAQ().resolveActivity(pm) != null)
extra.add(new NavMenuItem(R.drawable.baseline_question_answer_24, R.string.menu_faq, new Runnable() { extra.add(new NavMenuItem(R.drawable.baseline_question_answer_24, R.string.menu_faq, new Runnable() {
@Override @Override
public void run() { public void run() {
@ -359,7 +358,8 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB
} }
}).setExternal(true)); }).setExternal(true));
if (getIntentRate(this).resolveActivity(pm) != null) if ((Helper.isPlayStoreInstall(this) || BuildConfig.DEBUG) &&
getIntentRate(this).resolveActivity(pm) != null)
extra.add(new NavMenuItem(R.drawable.baseline_star_24, R.string.menu_rate, new Runnable() { extra.add(new NavMenuItem(R.drawable.baseline_star_24, R.string.menu_rate, new Runnable() {
@Override @Override
public void run() { public void run() {
@ -489,14 +489,9 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(ActivityView.this); SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(ActivityView.this);
boolean why = prefs.getBoolean("why", false); boolean why = prefs.getBoolean("why", false);
if (!why) { if (!why || BuildConfig.DEBUG) {
prefs.edit().putBoolean("why", true).apply(); prefs.edit().putBoolean("why", true).apply();
Helper.viewFAQ(this, 2);
Intent iwhy = new Intent(Intent.ACTION_VIEW);
iwhy.setData(Uri.parse(Helper.FAQ_URI + "#user-content-faq2"));
iwhy.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
if (iwhy.resolveActivity(getPackageManager()) != null)
startActivity(iwhy);
} }
} else if ("outbox".equals(action)) } else if ("outbox".equals(action))
@ -810,7 +805,8 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB
private Intent getIntentOtherApps() { private Intent getIntentOtherApps() {
Intent intent = new Intent(Intent.ACTION_VIEW); Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("https://play.google.com/store/apps/dev?id=8420080860664580239")); intent.setData(Uri.parse(Helper.isPlayStoreInstall(this)
? Helper.PLAY_APPS_URI : Helper.XDA_APPS_URI));
return intent; return intent;
} }
@ -891,7 +887,7 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB
} }
private void onMenuFAQ() { private void onMenuFAQ() {
Helper.view(this, Helper.getIntentFAQ()); Helper.viewFAQ(this, 0);
} }
private void onMenuIssue() { private void onMenuIssue() {
@ -920,10 +916,6 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB
} }
private void onMenuRate() { private void onMenuRate() {
Intent faq = Helper.getIntentFAQ();
if (faq.resolveActivity(getPackageManager()) == null)
Helper.view(this, getIntentRate(this));
else
new FragmentDialogRate().show(getSupportFragmentManager(), "rate"); new FragmentDialogRate().show(getSupportFragmentManager(), "rate");
} }
@ -1140,7 +1132,7 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB
.setPositiveButton(R.string.title_yes, new DialogInterface.OnClickListener() { .setPositiveButton(R.string.title_yes, new DialogInterface.OnClickListener() {
@Override @Override
public void onClick(DialogInterface dialog, int which) { public void onClick(DialogInterface dialog, int which) {
Helper.view(getContext(), Helper.getIntentFAQ()); Helper.viewFAQ(getContext(), 0);
} }
}) })
.setNegativeButton(R.string.title_no, new DialogInterface.OnClickListener() { .setNegativeButton(R.string.title_no, new DialogInterface.OnClickListener() {

@ -19,11 +19,11 @@ package eu.faircode.email;
Copyright 2018-2019 by Marcel Bokhorst (M66B) Copyright 2018-2019 by Marcel Bokhorst (M66B)
*/ */
import android.content.Intent;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.graphics.Paint; import android.graphics.Paint;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.text.TextUtils;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.Menu; import android.view.Menu;
import android.view.MenuInflater; import android.view.MenuInflater;
@ -64,11 +64,7 @@ public class FragmentAbout extends FragmentBase {
@Override @Override
public void onPrepareOptionsMenu(Menu menu) { public void onPrepareOptionsMenu(Menu menu) {
PackageManager pm = getContext().getPackageManager(); PackageManager pm = getContext().getPackageManager();
menu.findItem(R.id.menu_changelog).setVisible( menu.findItem(R.id.menu_changelog).setVisible(!TextUtils.isEmpty(BuildConfig.CHANGELOG));
!Helper.isPlayStoreInstall(getContext()) &&
getIntentChangelog().resolveActivity(pm) != null);
menu.findItem(R.id.menu_issue).setVisible(
Helper.getIntentIssue(getContext()).resolveActivity(pm) != null);
super.onPrepareOptionsMenu(menu); super.onPrepareOptionsMenu(menu);
} }
@ -78,9 +74,6 @@ public class FragmentAbout extends FragmentBase {
case R.id.menu_changelog: case R.id.menu_changelog:
onMenuChangelog(); onMenuChangelog();
return true; return true;
case R.id.menu_issue:
onMenuIssue();
return true;
case R.id.menu_attribution: case R.id.menu_attribution:
onMenuAttribution(); onMenuAttribution();
return true; return true;
@ -90,11 +83,7 @@ public class FragmentAbout extends FragmentBase {
} }
private void onMenuChangelog() { private void onMenuChangelog() {
startActivity(getIntentChangelog()); Helper.view(getContext(), Uri.parse(BuildConfig.CHANGELOG), false);
}
private void onMenuIssue() {
startActivity(Helper.getIntentIssue(getContext()));
} }
private void onMenuAttribution() { private void onMenuAttribution() {
@ -104,10 +93,4 @@ public class FragmentAbout extends FragmentBase {
fragment.setArguments(args); fragment.setArguments(args);
fragment.show(getFragmentManager(), "privacy"); fragment.show(getFragmentManager(), "privacy");
} }
private Intent getIntentChangelog() {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(BuildConfig.CHANGELOG));
return intent;
}
} }

@ -2415,19 +2415,11 @@ public class FragmentCompose extends FragmentBase {
}; };
private void handleFileShare() { private void handleFileShare() {
final Intent intent = new Intent(Intent.ACTION_VIEW); Snackbar sb = Snackbar.make(view, R.string.title_no_stream, Snackbar.LENGTH_INDEFINITE);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setData(Uri.parse(Helper.FAQ_URI + "#user-content-faq49"));
boolean resolves = (intent.resolveActivity(getContext().getPackageManager()) != null);
Snackbar sb = Snackbar.make(view,
R.string.title_no_stream,
resolves ? Snackbar.LENGTH_INDEFINITE : Snackbar.LENGTH_LONG);
if (resolves)
sb.setAction(R.string.title_info, new View.OnClickListener() { sb.setAction(R.string.title_info, new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
startActivity(intent); Helper.viewFAQ(getContext(), 49);
finish(); finish();
} }
}); });

@ -22,9 +22,6 @@ package eu.faircode.email;
import android.app.Dialog; import android.app.Dialog;
import android.content.Context; import android.content.Context;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.text.TextUtils; import android.text.TextUtils;
import android.view.LayoutInflater; import android.view.LayoutInflater;
@ -149,13 +146,6 @@ public class FragmentContacts extends FragmentBase {
super.onCreateOptionsMenu(menu, inflater); super.onCreateOptionsMenu(menu, inflater);
} }
@Override
public void onPrepareOptionsMenu(Menu menu) {
PackageManager pm = getContext().getPackageManager();
menu.findItem(R.id.menu_help).setVisible(getIntentHelp().resolveActivity(pm) != null);
super.onPrepareOptionsMenu(menu);
}
@Override @Override
public boolean onOptionsItemSelected(MenuItem item) { public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) { switch (item.getItemId()) {
@ -171,13 +161,7 @@ public class FragmentContacts extends FragmentBase {
} }
private void onMenuHelp() { private void onMenuHelp() {
startActivity(getIntentHelp()); Helper.viewFAQ(getContext(), 84);
}
private static Intent getIntentHelp() {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("https://github.com/M66B/FairEmail/blob/master/FAQ.md#user-content-faq84"));
return intent;
} }
public static class FragmentDelete extends FragmentDialogEx { public static class FragmentDelete extends FragmentDialogEx {

@ -4415,17 +4415,10 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences.
final Button btnInfo = dview.findViewById(R.id.btnInfo); final Button btnInfo = dview.findViewById(R.id.btnInfo);
final CheckBox cbNotAgain = dview.findViewById(R.id.cbNotAgain); final CheckBox cbNotAgain = dview.findViewById(R.id.cbNotAgain);
final Intent info = new Intent(Intent.ACTION_VIEW);
info.setData(Uri.parse(Helper.FAQ_URI + "#user-content-faq104"));
info.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
btnInfo.setVisibility(
info.resolveActivity(getContext().getPackageManager()) == null ? View.GONE : View.VISIBLE);
btnInfo.setOnClickListener(new View.OnClickListener() { btnInfo.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
startActivity(info); Helper.viewFAQ(getContext(), 104);
} }
}); });

@ -22,9 +22,6 @@ package eu.faircode.email;
import android.app.Dialog; import android.app.Dialog;
import android.content.Context; import android.content.Context;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.Menu; import android.view.Menu;
@ -110,13 +107,6 @@ public class FragmentOperations extends FragmentBase {
super.onCreateOptionsMenu(menu, inflater); super.onCreateOptionsMenu(menu, inflater);
} }
@Override
public void onPrepareOptionsMenu(Menu menu) {
PackageManager pm = getContext().getPackageManager();
menu.findItem(R.id.menu_help).setVisible(getFAQIntent().resolveActivity(pm) != null);
super.onPrepareOptionsMenu(menu);
}
@Override @Override
public boolean onOptionsItemSelected(MenuItem item) { public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) { switch (item.getItemId()) {
@ -133,13 +123,7 @@ public class FragmentOperations extends FragmentBase {
} }
private void onMenuHelp() { private void onMenuHelp() {
startActivity(getFAQIntent()); Helper.viewFAQ(getContext(), 3);
}
private Intent getFAQIntent() {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(Helper.FAQ_URI + "#user-content-faq3"));
return intent;
} }
public static class DialogDelete extends FragmentDialogEx { public static class DialogDelete extends FragmentDialogEx {

@ -21,9 +21,9 @@ package eu.faircode.email;
import android.content.Intent; import android.content.Intent;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.graphics.Paint;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.text.Html;
import android.text.method.LinkMovementMethod; import android.text.method.LinkMovementMethod;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
@ -65,9 +65,13 @@ public class FragmentPro extends FragmentBase implements SharedPreferences.OnSha
tvPriceHint = view.findViewById(R.id.tvPriceHint); tvPriceHint = view.findViewById(R.id.tvPriceHint);
btnCheck = view.findViewById(R.id.btnCheck); btnCheck = view.findViewById(R.id.btnCheck);
tvList.setText(HtmlHelper.fromHtml( tvList.setPaintFlags(tvList.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
"<a href=\"" + BuildConfig.PRO_FEATURES_URI + "\">" + Html.escapeHtml(getString(R.string.title_pro_list)) + "</a>")); tvList.setOnClickListener(new View.OnClickListener() {
tvList.setMovementMethod(LinkMovementMethod.getInstance()); @Override
public void onClick(View view) {
Helper.view(getContext(), Uri.parse(BuildConfig.PRO_FEATURES_URI), false);
}
});
btnPurchase.setOnClickListener(new View.OnClickListener() { btnPurchase.setOnClickListener(new View.OnClickListener() {
@Override @Override
@ -138,9 +142,7 @@ public class FragmentPro extends FragmentBase implements SharedPreferences.OnSha
@Override @Override
public void onError(String message) { public void onError(String message) {
final Intent support = new Intent( final Intent support = new Intent(Intent.ACTION_VIEW, Uri.parse(Helper.SUPPORT_URI));
Intent.ACTION_VIEW,
Uri.parse("https://contact.faircode.eu/?product=fairemailsupport"));
Snackbar snackbar = Snackbar.make(getView(), message, Snackbar.LENGTH_LONG); Snackbar snackbar = Snackbar.make(getView(), message, Snackbar.LENGTH_LONG);
if (support.resolveActivity(getContext().getPackageManager()) != null) if (support.resolveActivity(getContext().getPackageManager()) != null)
snackbar.setAction(R.string.title_setup_help, new View.OnClickListener() { snackbar.setAction(R.string.title_setup_help, new View.OnClickListener() {

@ -28,7 +28,6 @@ import android.content.Intent;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.os.PowerManager; import android.os.PowerManager;
@ -185,12 +184,10 @@ public class FragmentSetup extends FragmentBase {
} }
}); });
final Intent faq = new Intent(Intent.ACTION_VIEW, Uri.parse(Helper.FAQ_URI + "#user-content-faq39"));
btnBattery.setVisibility(faq.resolveActivity(pm) == null ? View.GONE : View.VISIBLE);
btnBattery.setOnClickListener(new View.OnClickListener() { btnBattery.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View view) { public void onClick(View view) {
startActivity(faq); Helper.viewFAQ(getContext(), 39);
} }
}); });

@ -115,6 +115,10 @@ public class Helper {
static final String FAQ_URI = "https://github.com/M66B/FairEmail/blob/master/FAQ.md"; static final String FAQ_URI = "https://github.com/M66B/FairEmail/blob/master/FAQ.md";
static final String XDA_URI = "https://forum.xda-developers.com/showthread.php?t=3824168"; static final String XDA_URI = "https://forum.xda-developers.com/showthread.php?t=3824168";
static final String SUPPORT_URI = "https://contact.faircode.eu/?product=fairemailsupport";
static final String PGP_URI = "https://f-droid.org/en/packages/org.sufficientlysecure.keychain/";
static final String PLAY_APPS_URI = "https://play.google.com/store/apps/dev?id=8420080860664580239";
static final String XDA_APPS_URI = "https://forum.xda-developers.com/search.php?searchid=457176824";
static ThreadFactory backgroundThreadFactory = new ThreadFactory() { static ThreadFactory backgroundThreadFactory = new ThreadFactory() {
private final AtomicInteger threadId = new AtomicInteger(); private final AtomicInteger threadId = new AtomicInteger();
@ -212,15 +216,16 @@ public class Helper {
} }
} }
static Intent getIntentFAQ() { static void viewFAQ(Context context, int question) {
Intent intent = new Intent(Intent.ACTION_VIEW); if (question == 0)
intent.setData(Uri.parse(Helper.FAQ_URI)); view(context, Uri.parse(FAQ_URI), false);
return intent; else
view(context, Uri.parse(Helper.FAQ_URI + "#user-content-faq" + question), false);
} }
static Intent getIntentOpenKeychain() { static Intent getIntentOpenKeychain() {
Intent intent = new Intent(Intent.ACTION_VIEW); Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("https://f-droid.org/en/packages/org.sufficientlysecure.keychain/")); intent.setData(Uri.parse(PGP_URI));
return intent; return intent;
} }

@ -46,6 +46,7 @@
android:layout_marginTop="24dp" android:layout_marginTop="24dp"
android:text="@string/title_pro_list" android:text="@string/title_pro_list"
android:textAppearance="@style/TextAppearance.AppCompat.Small" android:textAppearance="@style/TextAppearance.AppCompat.Small"
android:textColor="?attr/colorAccent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvActivated" /> app:layout_constraintTop_toBottomOf="@id/tvActivated" />

@ -6,11 +6,6 @@
android:title="@string/app_changelog" android:title="@string/app_changelog"
app:showAsAction="never" /> app:showAsAction="never" />
<item
android:id="@+id/menu_issue"
android:title="@string/menu_issue"
app:showAsAction="never" />
<item <item
android:id="@+id/menu_attribution" android:id="@+id/menu_attribution"
android:title="@string/menu_attribution" android:title="@string/menu_attribution"

Loading…
Cancel
Save