package com.orgzly.android.ui.util; import android.app.Activity; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.content.res.TypedArray; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Build; import android.os.Handler; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.View; import android.view.inputmethod.InputMethodManager; import com.orgzly.BuildConfig; import com.orgzly.R; import com.orgzly.android.ui.MainActivity; import com.orgzly.android.ui.fragments.BookPrefaceFragment; import com.orgzly.android.ui.fragments.BookFragment; import com.orgzly.android.ui.fragments.BooksFragment; import com.orgzly.android.ui.fragments.FilterFragment; import com.orgzly.android.ui.fragments.FiltersFragment; import com.orgzly.android.ui.fragments.NoteFragment; import com.orgzly.android.ui.fragments.QueryFragment; import com.orgzly.android.ui.fragments.ReposFragment; import com.orgzly.android.ui.fragments.SettingsFragment; import com.orgzly.android.util.LogUtils; /** * */ public class ActivityUtils { private static final String TAG = ActivityUtils.class.getName(); public static void closeSoftKeyboard(final Activity activity) { if (BuildConfig.LOG_DEBUG) LogUtils.d(TAG, "Hiding keyboard in activity " + activity); View view = activity.getCurrentFocus(); /* If no view currently has focus, create a new one to grab a window token from it. */ if (view == null) { if (BuildConfig.LOG_DEBUG) LogUtils.d(TAG, "No view in focus, using activity"); view = new View(activity); } final View finalView = view; // new Handler().postDelayed(new Runnable() { // @Override // public void run() { InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(finalView.getWindowToken(), 0); // } // }, 100); } public static void openSoftKeyboard(final Activity activity, final View view) { if (view.requestFocus()) { if (BuildConfig.LOG_DEBUG) LogUtils.d(TAG, "Showing keyboard for view " + view + " in activity " + activity); new Handler().postDelayed(new Runnable() { @Override public void run() { InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT); } }, 100); } else { Log.w(TAG, "Can't open keyboard because view " + view + " failed to get focus in activity " + activity); } } /** * Color the action bar depending on which fragment is displayed. */ public static void setColorsForFragment(final AppCompatActivity activity, String fragmentTag) { FragmentResources resources = new FragmentResources(activity, fragmentTag); /* Color status bar. */ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { activity.getWindow().setStatusBarColor(resources.statusColor); // getWindow().setNavigationBarColor(color); } /* Color action bar. */ activity.getSupportActionBar() .setBackgroundDrawable(new ColorDrawable(resources.actionColor)); } public static class FragmentResources { public int statusColor; public int actionColor; public Drawable fabDrawable; public FragmentResources(Context context, String fragmentTag) { int statusBarAttr; int actionBarAttr; int fabAttr; if (SettingsFragment.FRAGMENT_TAG.equals(fragmentTag)) { statusBarAttr = R.attr.status_bar_in_settings; actionBarAttr = R.attr.action_bar_in_settings; fabAttr = 0; } else if (ReposFragment.FRAGMENT_TAG.equals(fragmentTag)) { statusBarAttr = R.attr.status_bar_in_settings; actionBarAttr = R.attr.action_bar_in_settings; fabAttr = 0; } else if (FiltersFragment.FRAGMENT_TAG.equals(fragmentTag)) { statusBarAttr = R.attr.status_bar_in_query; actionBarAttr = R.attr.action_bar_in_query; fabAttr = R.attr.oic_new_item; } else if (FilterFragment.FRAGMENT_TAG.equals(fragmentTag)) { statusBarAttr = R.attr.status_bar_in_query; actionBarAttr = R.attr.action_bar_in_query; fabAttr = 0; } else if (QueryFragment.FRAGMENT_TAG.equals(fragmentTag)) { statusBarAttr = R.attr.status_bar_in_query; actionBarAttr = R.attr.action_bar_in_query; fabAttr = 0; } else if (BooksFragment.FRAGMENT_TAG.equals(fragmentTag)) { statusBarAttr = R.attr.status_bar_default; actionBarAttr = R.attr.action_bar_default; fabAttr = R.attr.oic_new_item; } else if (BookFragment.FRAGMENT_TAG.equals(fragmentTag)) { statusBarAttr = R.attr.status_bar_default; actionBarAttr = R.attr.action_bar_default; fabAttr = R.attr.oic_new_item; } else if (BookPrefaceFragment.FRAGMENT_TAG.equals(fragmentTag)) { statusBarAttr = R.attr.status_bar_default; actionBarAttr = R.attr.action_bar_default; fabAttr = 0; } else if (NoteFragment.FRAGMENT_TAG.equals(fragmentTag)) { statusBarAttr = R.attr.status_bar_default; actionBarAttr = R.attr.action_bar_default; fabAttr = 0; } else { statusBarAttr = R.attr.status_bar_default; actionBarAttr = R.attr.action_bar_default; fabAttr = 0; } TypedArray typedArray = context.obtainStyledAttributes(new int[] { statusBarAttr, actionBarAttr, fabAttr }); statusColor = typedArray.getColor(0, 0); actionColor = typedArray.getColor(1, 0); fabDrawable = typedArray.getDrawable(2); typedArray.recycle(); } } /** * Open "App info" settings, where permissions can be granted. */ public static void openAppInfoSettings(Activity activity) { Intent intent = new Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS); intent.setData(Uri.parse("package:" + BuildConfig.APPLICATION_ID)); activity.startActivity(intent); } public static PendingIntent mainActivityPendingIntent(Context context, long bookId, long noteId) { Intent intent = new Intent(context, MainActivity.class); intent.putExtra(MainActivity.EXTRA_NOTE_ID, noteId); intent.putExtra(MainActivity.EXTRA_BOOK_ID, bookId); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME))); return PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); } }