mirror of
https://github.com/szkolny-eu/szkolny-android.git
synced 2025-02-12 10:47:03 +01:00
358 lines
14 KiB
Java
358 lines
14 KiB
Java
![]() |
package com.danielstone.materialaboutlibrary;
|
||
|
|
||
|
import android.content.ActivityNotFoundException;
|
||
|
import android.content.Context;
|
||
|
import android.content.DialogInterface;
|
||
|
import android.content.Intent;
|
||
|
import android.content.pm.ApplicationInfo;
|
||
|
import android.content.pm.PackageInfo;
|
||
|
import android.content.pm.PackageManager;
|
||
|
import android.graphics.drawable.Drawable;
|
||
|
import android.net.Uri;
|
||
|
import android.os.Build;
|
||
|
import androidx.annotation.Nullable;
|
||
|
import androidx.appcompat.app.AlertDialog;
|
||
|
import android.webkit.WebView;
|
||
|
import android.widget.Toast;
|
||
|
|
||
|
import com.danielstone.materialaboutlibrary.items.MaterialAboutActionItem;
|
||
|
import com.danielstone.materialaboutlibrary.items.MaterialAboutItemOnClickAction;
|
||
|
import com.danielstone.materialaboutlibrary.items.MaterialAboutTitleItem;
|
||
|
import com.danielstone.materialaboutlibrary.model.MaterialAboutCard;
|
||
|
import com.danielstone.materialaboutlibrary.util.OpenSourceLicense;
|
||
|
|
||
|
@SuppressWarnings("JavaDoc")
|
||
|
public class ConvenienceBuilder {
|
||
|
|
||
|
public static MaterialAboutTitleItem createAppTitleItem(String appName, Drawable applicationIcon) {
|
||
|
return new MaterialAboutTitleItem(appName, null, applicationIcon);
|
||
|
}
|
||
|
|
||
|
public static MaterialAboutTitleItem createAppTitleItem(Context c) {
|
||
|
Context applicationContext = c.getApplicationContext();
|
||
|
PackageManager packageManager = applicationContext.getPackageManager();
|
||
|
ApplicationInfo applicationInfo = applicationContext.getApplicationInfo();
|
||
|
CharSequence appName = packageManager.getApplicationLabel(applicationInfo);
|
||
|
Drawable applicationIcon = packageManager.getApplicationIcon(applicationInfo);
|
||
|
return createAppTitleItem(appName == null ? "" : appName.toString(), applicationIcon);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Creates an item with version info read from the PackageManager for current application.
|
||
|
*
|
||
|
* @param c context
|
||
|
* @param icon
|
||
|
* @param text
|
||
|
* @param includeVersionCode
|
||
|
* @return Item to add to card.
|
||
|
*/
|
||
|
public static MaterialAboutActionItem createVersionActionItem(Context c, Drawable icon, CharSequence text, boolean includeVersionCode) {
|
||
|
String versionName = "";
|
||
|
int versionCode = 0;
|
||
|
try {
|
||
|
PackageInfo pInfo = c.getPackageManager().getPackageInfo(c.getPackageName(), 0);
|
||
|
versionName = pInfo.versionName;
|
||
|
versionCode = pInfo.versionCode;
|
||
|
} catch (PackageManager.NameNotFoundException ignored) {
|
||
|
// This shouldn't happen.
|
||
|
}
|
||
|
return new MaterialAboutActionItem.Builder()
|
||
|
.text(text)
|
||
|
.subText(versionName + (includeVersionCode ? " (" + versionCode + ")" : ""))
|
||
|
.icon(icon)
|
||
|
.build();
|
||
|
}
|
||
|
|
||
|
public static MaterialAboutItemOnClickAction createWebViewDialogOnClickAction(final Context c, final CharSequence dialogTitle, final String htmlString, final boolean isStringUrl, final boolean supportZoom) {
|
||
|
return createWebViewDialogOnClickAction(c, dialogTitle, c.getString(R.string.mal_close), htmlString, isStringUrl, supportZoom);
|
||
|
}
|
||
|
|
||
|
public static MaterialAboutItemOnClickAction createWebViewDialogOnClickAction(final Context c, final CharSequence dialogTitle, final CharSequence dialogNegativeButton, final String htmlString, final boolean isStringUrl, final boolean supportZoom) {
|
||
|
|
||
|
return new MaterialAboutItemOnClickAction() {
|
||
|
@Override
|
||
|
public void onClick() {
|
||
|
AlertDialog.Builder alertBuilder = new AlertDialog.Builder(c);
|
||
|
alertBuilder.setTitle(dialogTitle);
|
||
|
|
||
|
final WebView wv = new WebView(c);
|
||
|
wv.getSettings().setSupportZoom(supportZoom);
|
||
|
if (!supportZoom) {
|
||
|
wv.getSettings().setLoadWithOverviewMode(true);
|
||
|
wv.getSettings().setUseWideViewPort(true);
|
||
|
}
|
||
|
if (isStringUrl) {
|
||
|
wv.loadUrl(htmlString);
|
||
|
} else {
|
||
|
wv.loadData(htmlString, "text/html; charset=utf-8", "UTF-8");
|
||
|
}
|
||
|
|
||
|
alertBuilder.setView(wv);
|
||
|
alertBuilder.setNegativeButton(dialogNegativeButton, new DialogInterface.OnClickListener() {
|
||
|
@Override
|
||
|
public void onClick(DialogInterface dialog, int id) {
|
||
|
wv.destroy();
|
||
|
dialog.dismiss();
|
||
|
}
|
||
|
});
|
||
|
|
||
|
final AlertDialog dialog = alertBuilder.create();
|
||
|
dialog.show();
|
||
|
}
|
||
|
};
|
||
|
}
|
||
|
|
||
|
|
||
|
public static MaterialAboutActionItem createWebViewDialogItem(Context c, Drawable icon, CharSequence text, @Nullable CharSequence subText, CharSequence dialogTitle, String htmlString, boolean isStringUrl, boolean supportZoom) {
|
||
|
return createWebViewDialogItem(c, icon, text, subText, dialogTitle, c.getString(R.string.mal_close), htmlString, isStringUrl, supportZoom);
|
||
|
}
|
||
|
|
||
|
public static MaterialAboutActionItem createWebViewDialogItem(Context c, Drawable icon, CharSequence text, @Nullable CharSequence subText, CharSequence dialogTitle, CharSequence dialogNegativeButton, String htmlString, boolean isStringUrl, boolean supportZoom) {
|
||
|
return new MaterialAboutActionItem.Builder()
|
||
|
.text(text)
|
||
|
.subText(subText)
|
||
|
.icon(icon)
|
||
|
.setOnClickAction(createWebViewDialogOnClickAction(c, dialogTitle, dialogNegativeButton, htmlString, isStringUrl, supportZoom))
|
||
|
.build();
|
||
|
}
|
||
|
|
||
|
|
||
|
public static MaterialAboutItemOnClickAction createWebsiteOnClickAction(final Context c, final Uri websiteUrl) {
|
||
|
return new MaterialAboutItemOnClickAction() {
|
||
|
@Override
|
||
|
public void onClick() {
|
||
|
Intent i = new Intent(Intent.ACTION_VIEW);
|
||
|
i.setData(websiteUrl);
|
||
|
try {
|
||
|
c.startActivity(i);
|
||
|
} catch (Exception e) {
|
||
|
// No activity to handle intent
|
||
|
Toast.makeText(c, R.string.mal_activity_exception, Toast.LENGTH_SHORT).show();
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Creates an ActionItem which will open a url when tapped
|
||
|
*
|
||
|
* @param c context
|
||
|
* @param text
|
||
|
* @param icon
|
||
|
* @param websiteUrl (subText)
|
||
|
* @return Item to add to card.
|
||
|
*/
|
||
|
public static MaterialAboutActionItem createWebsiteActionItem(Context c, Drawable icon, CharSequence text, boolean showAddress, final Uri websiteUrl) {
|
||
|
return new MaterialAboutActionItem.Builder()
|
||
|
.text(text)
|
||
|
.subText((showAddress ? websiteUrl.toString() : null))
|
||
|
.icon(icon)
|
||
|
.setOnClickAction(createWebsiteOnClickAction(c, websiteUrl))
|
||
|
.build();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Creates a MaterialAboutItemOnClickAction that will open
|
||
|
* the Google Play store listing for the app.
|
||
|
*
|
||
|
* @param c context
|
||
|
* @return onClickAction
|
||
|
*/
|
||
|
public static MaterialAboutItemOnClickAction createRateOnClickAction(final Context c) {
|
||
|
Uri uri = Uri.parse("market://details?id=" + c.getPackageName());
|
||
|
final Intent goToMarket = new Intent(Intent.ACTION_VIEW, uri);
|
||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||
|
goToMarket.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY |
|
||
|
Intent.FLAG_ACTIVITY_NEW_DOCUMENT |
|
||
|
Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
|
||
|
} else {
|
||
|
goToMarket.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY |
|
||
|
Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
|
||
|
}
|
||
|
|
||
|
return new MaterialAboutItemOnClickAction() {
|
||
|
@Override
|
||
|
public void onClick() {
|
||
|
try {
|
||
|
c.startActivity(goToMarket);
|
||
|
} catch (ActivityNotFoundException e) {
|
||
|
c.startActivity(new Intent(Intent.ACTION_VIEW,
|
||
|
Uri.parse("http://play.google.com/store/apps/details?id=" + c.getPackageName())));
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Creates an ActionItem which will open the play store when tapped
|
||
|
*
|
||
|
* @param c context
|
||
|
* @param text
|
||
|
* @param subText
|
||
|
* @param icon
|
||
|
* @return Item to add to card.
|
||
|
*/
|
||
|
public static MaterialAboutActionItem createRateActionItem(Context c, Drawable icon, CharSequence text, @Nullable CharSequence subText) {
|
||
|
|
||
|
return new MaterialAboutActionItem.Builder()
|
||
|
.text(text)
|
||
|
.subText(subText)
|
||
|
.icon(icon)
|
||
|
.setOnClickAction(createRateOnClickAction(c))
|
||
|
.build();
|
||
|
}
|
||
|
|
||
|
public static MaterialAboutItemOnClickAction createEmailOnClickAction(final Context c, String email, String emailSubject) {
|
||
|
return createEmailOnClickAction(c, email, emailSubject, c.getString(R.string.mal_send_email));
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Creates a MaterialAboutItemOnClickAction that will open
|
||
|
* an email intent with specified address.
|
||
|
*
|
||
|
* @param c context
|
||
|
* @param email email address
|
||
|
* @return onClickAction
|
||
|
*/
|
||
|
public static MaterialAboutItemOnClickAction createEmailOnClickAction(final Context c, String email, String emailSubject, final CharSequence chooserTitle) {
|
||
|
|
||
|
final Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.parse("mailto:" + email));
|
||
|
emailIntent.putExtra(Intent.EXTRA_SUBJECT, emailSubject);
|
||
|
|
||
|
return new MaterialAboutItemOnClickAction() {
|
||
|
@Override
|
||
|
public void onClick() {
|
||
|
try {
|
||
|
c.startActivity(Intent.createChooser(emailIntent, chooserTitle));
|
||
|
} catch (Exception e) {
|
||
|
// No activity to handle intent
|
||
|
Toast.makeText(c, R.string.mal_activity_exception, Toast.LENGTH_SHORT).show();
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Creates an ActionItem which will open the an email intent when tapped
|
||
|
*
|
||
|
* @param c context
|
||
|
* @param text
|
||
|
* @param icon
|
||
|
* @param email email address (also used as subText)
|
||
|
* @return Item to add to card.
|
||
|
*/
|
||
|
public static MaterialAboutActionItem createEmailItem(Context c, Drawable icon, CharSequence text, boolean showEmail, String email, String emailSubject, CharSequence chooserTitle) {
|
||
|
return new MaterialAboutActionItem.Builder()
|
||
|
.text(text)
|
||
|
.subText((showEmail ? email : null))
|
||
|
.icon(icon)
|
||
|
.setOnClickAction(createEmailOnClickAction(c, email, emailSubject, chooserTitle))
|
||
|
.build();
|
||
|
}
|
||
|
|
||
|
public static MaterialAboutActionItem createEmailItem(Context c, Drawable icon, CharSequence text, boolean showEmail, String email, String emailSubject) {
|
||
|
return createEmailItem(c, icon, text, showEmail, email, emailSubject, c.getString(R.string.mal_send_email));
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Creates a MaterialAboutItemOnClickAction that will open
|
||
|
* the dialer with specified number.
|
||
|
*
|
||
|
* @param c context
|
||
|
* @param number phone number
|
||
|
* @return onClickAction
|
||
|
*/
|
||
|
public static MaterialAboutItemOnClickAction createPhoneOnClickAction(final Context c, String number) {
|
||
|
final Intent phoneIntent = new Intent(Intent.ACTION_DIAL);
|
||
|
phoneIntent.setData(Uri.parse("tel:" + number));
|
||
|
|
||
|
return new MaterialAboutItemOnClickAction() {
|
||
|
@Override
|
||
|
public void onClick() {
|
||
|
try {
|
||
|
c.startActivity(phoneIntent);
|
||
|
} catch (Exception e) {
|
||
|
// No activity to handle intent
|
||
|
Toast.makeText(c, R.string.mal_activity_exception, Toast.LENGTH_SHORT).show();
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Creates an ActionItem which will open the dialer when tapped
|
||
|
*
|
||
|
* @param c context
|
||
|
* @param text
|
||
|
* @param icon
|
||
|
* @param number phone number (also used as subText)
|
||
|
* @return Item to add to card.
|
||
|
*/
|
||
|
public static MaterialAboutActionItem createPhoneItem(Context c, Drawable icon, CharSequence text, boolean showNumber, String number) {
|
||
|
return new MaterialAboutActionItem.Builder()
|
||
|
.text(text)
|
||
|
.subText((showNumber ? number : null))
|
||
|
.icon(icon)
|
||
|
.setOnClickAction(createPhoneOnClickAction(c, number))
|
||
|
.build();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Creates a MaterialAboutItemOnClickAction that will open
|
||
|
* maps with a query.
|
||
|
* Query can be either lat,lng(label) or written address
|
||
|
*
|
||
|
* @param c context
|
||
|
* @param addressQuery address query
|
||
|
* @return onClickAction
|
||
|
*/
|
||
|
public static MaterialAboutItemOnClickAction createMapOnClickAction(final Context c, String addressQuery) {
|
||
|
final Intent mapIntent = new Intent(Intent.ACTION_VIEW);
|
||
|
mapIntent.setData(Uri.parse("geo:0,0").buildUpon().appendQueryParameter("q", addressQuery).build());
|
||
|
return new MaterialAboutItemOnClickAction() {
|
||
|
@Override
|
||
|
public void onClick() {
|
||
|
try {
|
||
|
c.startActivity(mapIntent);
|
||
|
} catch (Exception e) {
|
||
|
// No activity to handle intent
|
||
|
Toast.makeText(c, R.string.mal_activity_exception, Toast.LENGTH_SHORT).show();
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Creates an ActionItem which will open maps when tapped
|
||
|
* Query can be either lat,lng(label) or written address
|
||
|
*
|
||
|
* @param c context
|
||
|
* @param text
|
||
|
* @param subText can be set to null
|
||
|
* @param icon
|
||
|
* @param addressQuery addressQuery
|
||
|
* @return Item to add to card.
|
||
|
*/
|
||
|
public static MaterialAboutActionItem createMapItem(Context c, Drawable icon, CharSequence text, CharSequence subText, String addressQuery) {
|
||
|
return new MaterialAboutActionItem.Builder()
|
||
|
.text(text)
|
||
|
.subText(subText)
|
||
|
.icon(icon)
|
||
|
.setOnClickAction(createMapOnClickAction(c, addressQuery))
|
||
|
.build();
|
||
|
}
|
||
|
|
||
|
public static MaterialAboutCard createLicenseCard(Context c, Drawable icon, CharSequence libraryTitle, CharSequence year, CharSequence name, OpenSourceLicense license) {
|
||
|
|
||
|
MaterialAboutActionItem licenseItem = new MaterialAboutActionItem.Builder()
|
||
|
.icon(icon)
|
||
|
.setIconGravity(MaterialAboutActionItem.GRAVITY_TOP)
|
||
|
.text(libraryTitle)
|
||
|
.subText(String.format(c.getString(license.getResourceId()), year, name))
|
||
|
.build();
|
||
|
|
||
|
return new MaterialAboutCard.Builder().addItem(licenseItem).build();
|
||
|
}
|
||
|
|
||
|
}
|