Revised link handling

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

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

@ -229,14 +229,13 @@ 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() {
@Override
public void run() {
drawerLayout.closeDrawer(drawerContainer);
onMenuFAQ();
}
}).setExternal(true));
menus.add(new NavMenuItem(R.drawable.baseline_question_answer_24, R.string.menu_faq, new Runnable() {
@Override
public void run() {
drawerLayout.closeDrawer(drawerContainer);
onMenuFAQ();
}
}).setExternal(true));
menus.add(new NavMenuItem(R.drawable.baseline_account_box_24, R.string.menu_privacy, new Runnable() {
@Override
@ -499,7 +498,7 @@ public class ActivitySetup extends ActivityBase implements FragmentManager.OnBac
}
private void onMenuFAQ() {
Helper.view(this, Helper.getIntentFAQ());
Helper.viewFAQ(this, 0);
}
private void onMenuPrivacy() {

@ -295,20 +295,19 @@ 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() {
@Override
public void run() {
drawerLayout.closeDrawer(drawerContainer);
onMenuFAQ();
}
}, new Runnable() {
@Override
public void run() {
drawerLayout.closeDrawer(drawerContainer);
onDebugInfo();
}
}).setExternal(true));
extra.add(new NavMenuItem(R.drawable.baseline_question_answer_24, R.string.menu_faq, new Runnable() {
@Override
public void run() {
drawerLayout.closeDrawer(drawerContainer);
onMenuFAQ();
}
}, new Runnable() {
@Override
public void run() {
drawerLayout.closeDrawer(drawerContainer);
onDebugInfo();
}
}).setExternal(true));
if (Helper.getIntentIssue(this).resolveActivity(pm) != null)
extra.add(new NavMenuItem(R.drawable.baseline_feedback_24, R.string.menu_issue, new Runnable() {
@ -359,7 +358,8 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB
}
}).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() {
@Override
public void run() {
@ -489,14 +489,9 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(ActivityView.this);
boolean why = prefs.getBoolean("why", false);
if (!why) {
if (!why || BuildConfig.DEBUG) {
prefs.edit().putBoolean("why", true).apply();
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);
Helper.viewFAQ(this, 2);
}
} else if ("outbox".equals(action))
@ -810,7 +805,8 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB
private Intent getIntentOtherApps() {
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;
}
@ -891,7 +887,7 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB
}
private void onMenuFAQ() {
Helper.view(this, Helper.getIntentFAQ());
Helper.viewFAQ(this, 0);
}
private void onMenuIssue() {
@ -920,11 +916,7 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB
}
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");
}
private void onMenuOtherApps() {
@ -1140,7 +1132,7 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB
.setPositiveButton(R.string.title_yes, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Helper.view(getContext(), Helper.getIntentFAQ());
Helper.viewFAQ(getContext(), 0);
}
})
.setNegativeButton(R.string.title_no, new DialogInterface.OnClickListener() {

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

@ -2415,22 +2415,14 @@ public class FragmentCompose extends FragmentBase {
};
private void handleFileShare() {
final Intent intent = new Intent(Intent.ACTION_VIEW);
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() {
@Override
public void onClick(View v) {
startActivity(intent);
finish();
}
});
Snackbar sb = Snackbar.make(view, R.string.title_no_stream, Snackbar.LENGTH_INDEFINITE);
sb.setAction(R.string.title_info, new View.OnClickListener() {
@Override
public void onClick(View v) {
Helper.viewFAQ(getContext(), 49);
finish();
}
});
sb.show();
}

@ -22,9 +22,6 @@ package eu.faircode.email;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.LayoutInflater;
@ -149,13 +146,6 @@ public class FragmentContacts extends FragmentBase {
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
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
@ -171,13 +161,7 @@ public class FragmentContacts extends FragmentBase {
}
private void onMenuHelp() {
startActivity(getIntentHelp());
}
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;
Helper.viewFAQ(getContext(), 84);
}
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 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() {
@Override
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.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
@ -110,13 +107,6 @@ public class FragmentOperations extends FragmentBase {
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
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
@ -133,13 +123,7 @@ public class FragmentOperations extends FragmentBase {
}
private void onMenuHelp() {
startActivity(getFAQIntent());
}
private Intent getFAQIntent() {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(Helper.FAQ_URI + "#user-content-faq3"));
return intent;
Helper.viewFAQ(getContext(), 3);
}
public static class DialogDelete extends FragmentDialogEx {

@ -21,9 +21,9 @@ package eu.faircode.email;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Paint;
import android.net.Uri;
import android.os.Bundle;
import android.text.Html;
import android.text.method.LinkMovementMethod;
import android.view.LayoutInflater;
import android.view.View;
@ -65,9 +65,13 @@ public class FragmentPro extends FragmentBase implements SharedPreferences.OnSha
tvPriceHint = view.findViewById(R.id.tvPriceHint);
btnCheck = view.findViewById(R.id.btnCheck);
tvList.setText(HtmlHelper.fromHtml(
"<a href=\"" + BuildConfig.PRO_FEATURES_URI + "\">" + Html.escapeHtml(getString(R.string.title_pro_list)) + "</a>"));
tvList.setMovementMethod(LinkMovementMethod.getInstance());
tvList.setPaintFlags(tvList.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
tvList.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Helper.view(getContext(), Uri.parse(BuildConfig.PRO_FEATURES_URI), false);
}
});
btnPurchase.setOnClickListener(new View.OnClickListener() {
@Override
@ -138,9 +142,7 @@ public class FragmentPro extends FragmentBase implements SharedPreferences.OnSha
@Override
public void onError(String message) {
final Intent support = new Intent(
Intent.ACTION_VIEW,
Uri.parse("https://contact.faircode.eu/?product=fairemailsupport"));
final Intent support = new Intent(Intent.ACTION_VIEW, Uri.parse(Helper.SUPPORT_URI));
Snackbar snackbar = Snackbar.make(getView(), message, Snackbar.LENGTH_LONG);
if (support.resolveActivity(getContext().getPackageManager()) != null)
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.pm.PackageManager;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
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() {
@Override
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 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() {
private final AtomicInteger threadId = new AtomicInteger();
@ -212,15 +216,16 @@ public class Helper {
}
}
static Intent getIntentFAQ() {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(Helper.FAQ_URI));
return intent;
static void viewFAQ(Context context, int question) {
if (question == 0)
view(context, Uri.parse(FAQ_URI), false);
else
view(context, Uri.parse(Helper.FAQ_URI + "#user-content-faq" + question), false);
}
static Intent getIntentOpenKeychain() {
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;
}

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

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

Loading…
Cancel
Save