/* * Overchan Android (Meta Imageboard Client) * Copyright (C) 2014-2016 miku-nyan <https://github.com/miku-nyan> * * This program 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. * * This program 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 this program. If not, see <http://www.gnu.org/licenses/>. */ package nya.miku.wishmaster.ui; import java.io.File; import nya.miku.wishmaster.R; import android.Manifest; import android.annotation.TargetApi; import android.app.ActionBar; import android.app.Activity; import android.content.ClipData; import android.content.ClipboardManager; import android.content.Context; import android.content.pm.PackageManager; import android.content.res.ColorStateList; import android.content.res.Resources; import android.graphics.Point; import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Build; import android.os.Environment; import android.preference.Preference; import android.provider.DocumentsContract; import android.view.ActionMode; import android.view.Display; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewStub; import android.view.Window; import android.view.ViewTreeObserver.OnGlobalLayoutListener; import android.webkit.CookieManager; import android.webkit.WebSettings; import android.webkit.WebView; import android.widget.ImageView; import android.widget.TextView; import android.widget.VideoView; /** * Класс, содержащий вызовы методов из новых API, недоступных в ранних версиях Android * @author miku-nyan * */ public class CompatibilityImpl { private CompatibilityImpl() {} @TargetApi(Build.VERSION_CODES.HONEYCOMB) public static void setIcon(Preference preference, int iconResId) { preference.setIcon(iconResId); } @TargetApi(Build.VERSION_CODES.HONEYCOMB) public static void setIcon(Preference preference, Drawable icon) { preference.setIcon(icon); } @TargetApi(Build.VERSION_CODES.HONEYCOMB) public static void activeActionBar(Activity activity) { activity.getActionBar().setDisplayHomeAsUpEnabled(true); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) { setHomeButtonEnabledTrue(activity.getActionBar()); } } @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) private static void setHomeButtonEnabledTrue(ActionBar actionBar) { actionBar.setHomeButtonEnabled(true); } @TargetApi(Build.VERSION_CODES.HONEYCOMB) public static void setShowAsActionIfRoom(MenuItem item) { item.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); } @TargetApi(Build.VERSION_CODES.HONEYCOMB) public static void setShowAsActionAlways(MenuItem item) { item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); } @TargetApi(Build.VERSION_CODES.HONEYCOMB) public static void setActionBarNoIcon(Activity activity) { ActionBar actionBar = activity.getActionBar(); if (actionBar != null) actionBar.setDisplayShowHomeEnabled(false); } @TargetApi(Build.VERSION_CODES.HONEYCOMB) public static boolean hideActionBar(Activity activity) { ActionBar actionBar = activity.getActionBar(); if (actionBar == null || !actionBar.isShowing()) return false; actionBar.hide(); return true; } @TargetApi(Build.VERSION_CODES.HONEYCOMB) public static boolean showActionBar(Activity activity) { ActionBar actionBar = activity.getActionBar(); if (actionBar == null || actionBar.isShowing()) return false; actionBar.show(); return true; } @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) public static void setActionBarCustomFavicon(Activity activity, Drawable icon) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { //activity.getActionBar().setDisplayShowHomeEnabled(true); //activity.getActionBar().setIcon(icon); } else { activity.getActionBar().setIcon(icon); } } @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) public static void setActionBarDefaultIcon(Activity activity) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { //activity.getActionBar().setDisplayShowHomeEnabled(false); } else { activity.getActionBar().setIcon(R.drawable.ic_launcher); } } public static interface CustomSelectionActionModeCallback { void onCreate(); void onClick(); void onDestroy(); } @TargetApi(Build.VERSION_CODES.HONEYCOMB) public static void setCustomSelectionActionModeMenuCallback(TextView textView, final int titleRes, final Drawable icon, final CustomSelectionActionModeCallback callback) { textView.setCustomSelectionActionModeCallback(new ActionMode.Callback() { @Override public boolean onCreateActionMode(ActionMode mode, Menu menu) { try { callback.onCreate(); setShowAsActionAlways(menu.add(Menu.NONE, 1, Menu.FIRST, titleRes).setIcon(icon)); menu.removeItem(android.R.id.selectAll); return true; } catch (Exception e) { return false; } } @Override public boolean onPrepareActionMode(ActionMode mode, Menu menu) { return false; } @Override public boolean onActionItemClicked(ActionMode mode, MenuItem item) { if (item.getItemId() == 1) { callback.onClick(); mode.finish(); return true; } return false; } @Override public void onDestroyActionMode(ActionMode mode) { callback.onDestroy(); } }); } @TargetApi(Build.VERSION_CODES.JELLY_BEAN) public static void setLayoutInflater(ViewStub view, LayoutInflater inflater) { view.setLayoutInflater(inflater); } @TargetApi(Build.VERSION_CODES.FROYO) public static File getExternalCacheDir(Context context) { return context.getExternalCacheDir(); } @TargetApi(Build.VERSION_CODES.FROYO) public static File getExternalFilesDir(Context context) { return context.getExternalFilesDir(null); } @TargetApi(Build.VERSION_CODES.HONEYCOMB) public static void copyToClipboardAPI11(Activity activity, String label, String text) { ClipboardManager clipboard = (ClipboardManager) activity.getSystemService(Context.CLIPBOARD_SERVICE); ClipData clip = ClipData.newPlainText(label, text); clipboard.setPrimaryClip(clip); } @TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2) public static void getDisplaySize(Display display, Point outSize) { display.getSize(outSize); } @TargetApi(Build.VERSION_CODES.HONEYCOMB) public static boolean isTextSelectable(TextView textView) { return textView.isTextSelectable(); } @TargetApi(Build.VERSION_CODES.HONEYCOMB) public static void setTextIsSelectable(TextView textView) { textView.setTextIsSelectable(true); } @TargetApi(Build.VERSION_CODES.LOLLIPOP) public static void clearCookies(CookieManager cookieManager) { cookieManager.removeAllCookies(null); } @TargetApi(Build.VERSION_CODES.JELLY_BEAN) public static void removeOnGlobalLayoutListener(View view, OnGlobalLayoutListener onGlobalLayoutListener) { view.getViewTreeObserver().removeOnGlobalLayoutListener(onGlobalLayoutListener); } @TargetApi(Build.VERSION_CODES.KITKAT) public static boolean isDocumentUri(Context context, Uri uri) { return DocumentsContract.isDocumentUri(context, uri); } @TargetApi(Build.VERSION_CODES.KITKAT) public static String getDocumentId(Uri uri) { return DocumentsContract.getDocumentId(uri); } @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) public static void setDimAmount(Window window, float f) { window.setDimAmount(f); } @TargetApi(Build.VERSION_CODES.FROYO) public static File getDefaultDownloadDir() { return Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS); } @TargetApi(Build.VERSION_CODES.ECLAIR) public static void setScrollbarFadingEnabled(WebView webView, boolean fadeScrollbars) { webView.setScrollbarFadingEnabled(fadeScrollbars); } @SuppressWarnings("deprecation") @TargetApi(Build.VERSION_CODES.ECLAIR_MR1) public static void setDefaultZoomFAR(WebSettings settings) { settings.setDefaultZoom(WebSettings.ZoomDensity.FAR); } @SuppressWarnings("deprecation") @TargetApi(Build.VERSION_CODES.ECLAIR_MR1) public static void setDefaultZoomCLOSE(WebSettings settings) { settings.setDefaultZoom(WebSettings.ZoomDensity.CLOSE); } @SuppressWarnings("deprecation") @TargetApi(Build.VERSION_CODES.ECLAIR_MR1) public static void setDefaultZoomMEDIUM(WebSettings settings) { settings.setDefaultZoom(WebSettings.ZoomDensity.MEDIUM); } @TargetApi(Build.VERSION_CODES.ECLAIR_MR1) public static void setLoadWithOverviewMode(WebSettings settings, boolean overview) { settings.setLoadWithOverviewMode(overview); } @TargetApi(Build.VERSION_CODES.FROYO) public static void setBlockNetworkLoads(WebSettings settings, boolean flag) { settings.setBlockNetworkLoads(flag); } @TargetApi(Build.VERSION_CODES.ECLAIR) public static void setVideoViewZOrderOnTop(VideoView videoView) { videoView.setZOrderOnTop(true); } @TargetApi(Build.VERSION_CODES.HONEYCOMB) public static void recreateActivity(Activity activity) { activity.recreate(); } @TargetApi(Build.VERSION_CODES.JELLY_BEAN) public static void setImageAlpha(ImageView imageView, int alpha) { imageView.setImageAlpha(alpha); } @TargetApi(Build.VERSION_CODES.M) public static int getColor(Resources resources, int id) { return resources.getColor(id, null); } @TargetApi(Build.VERSION_CODES.M) public static ColorStateList getColorStateList(Resources resources, int id) { return resources.getColorStateList(id, null); } @TargetApi(Build.VERSION_CODES.M) public static void setTextAppearance(TextView textView, int resId) { textView.setTextAppearance(resId); } @TargetApi(Build.VERSION_CODES.M) public static boolean hasAccessStorage(Activity activity) { if (activity.checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { activity.requestPermissions(new String[] { Manifest.permission.WRITE_EXTERNAL_STORAGE }, 0); return false; } else { return true; } } }