package org.wordpress.android.util; import android.annotation.SuppressLint; import android.app.Dialog; import android.app.Fragment; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.content.res.Configuration; import android.content.res.Resources; import android.os.Build; import android.preference.PreferenceManager; import android.support.annotation.Nullable; import android.support.v7.app.ActionBar; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.Window; import android.view.WindowManager; import android.view.inputmethod.InputMethodManager; import android.widget.TextView; import org.wordpress.android.R; import org.wordpress.android.ui.prefs.AppSettingsFragment; import java.util.List; import java.util.Locale; public class WPActivityUtils { // Hack! PreferenceScreens don't show the toolbar, so we'll manually add one // See: http://stackoverflow.com/a/27455363/309558 public static void addToolbarToDialog(final Fragment context, final Dialog dialog, String title) { if (!context.isAdded() || dialog == null) { return; } Toolbar toolbar; if (dialog.findViewById(android.R.id.list) == null && dialog.findViewById(android.R.id.list_container) == null) { return; } @SuppressLint("InlinedApi") View child = dialog.findViewById(android.R.id.list_container); if (child == null) { child = dialog.findViewById(android.R.id.list); if (child == null) return; } ViewGroup root = (ViewGroup) child.getParent(); toolbar = (Toolbar) LayoutInflater.from(context.getActivity()) .inflate(org.wordpress.android.R.layout.toolbar, root, false); root.addView(toolbar, 0); dialog.getWindow().setWindowAnimations(R.style.DialogAnimations); TextView titleView = (TextView) toolbar.findViewById(R.id.toolbar_title); titleView.setVisibility(View.VISIBLE); titleView.setText(title); toolbar.setTitle(""); toolbar.setNavigationIcon(org.wordpress.android.R.drawable.ic_arrow_left_white_24dp); toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dialog.dismiss(); } }); } /** * Checks for a {@link Toolbar} at the first child element of a given {@link Dialog} and * removes it if it exists. * * Originally added to prevent a crash that occurs with nested PreferenceScreens that added * a toolbar via {@link WPActivityUtils#addToolbarToDialog(Fragment, Dialog, String)}. The * crash can be reproduced by turning 'Don't keep activities' on from Developer options. */ public static void removeToolbarFromDialog(final Fragment context, final Dialog dialog) { if (dialog == null || !context.isAdded()) return; ViewGroup root = (ViewGroup) dialog.findViewById(android.R.id.list).getParent(); if (root.getChildAt(0) instanceof Toolbar) { root.removeViewAt(0); } } public static void setStatusBarColor(Window window, int color) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); //noinspection deprecation window.setStatusBarColor(window.getContext().getResources().getColor(color)); } } public static void hideKeyboard(@Nullable final View view) { if (view == null) return; InputMethodManager inputMethodManager = (InputMethodManager) view.getContext() .getSystemService(Context.INPUT_METHOD_SERVICE); inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), 0); } public static void applyLocale(Context context) { SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context); if (sharedPreferences.contains(AppSettingsFragment.LANGUAGE_PREF_KEY)) { Locale contextLocale = context.getResources().getConfiguration().locale; String contextLanguage = contextLocale.getLanguage(); contextLanguage = LanguageUtils.patchDeviceLanguageCode(contextLanguage); String contextCountry = contextLocale.getCountry(); String locale = sharedPreferences.getString(AppSettingsFragment.LANGUAGE_PREF_KEY, ""); if (!TextUtils.isEmpty(contextCountry)) { contextLanguage += "_" + contextCountry; } if (!locale.equals(contextLanguage)) { Resources resources = context.getResources(); Configuration conf = resources.getConfiguration(); conf.locale = new Locale(locale); resources.updateConfiguration(conf, resources.getDisplayMetrics()); } } } public static Context getThemedContext(Context context) { if (context instanceof AppCompatActivity) { ActionBar actionBar = ((AppCompatActivity)context).getSupportActionBar(); if (actionBar != null) { return actionBar.getThemedContext(); } } return context; } public static boolean isEmailClientAvailable(Context context) { if (context == null) { return false; } Intent intent = new Intent(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_APP_EMAIL); PackageManager packageManager = context.getPackageManager(); List<ResolveInfo> emailApps = packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY); return !emailApps.isEmpty(); } public static void disableComponent(Context context, Class<?> klass) { PackageManager pm = context.getPackageManager(); pm.setComponentEnabledSetting(new ComponentName(context, klass), PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP); } public static void enableComponent(Context context, Class<?> klass) { PackageManager pm = context.getPackageManager(); pm.setComponentEnabledSetting(new ComponentName(context, klass), PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP); } }