package com.piusvelte.sonet.fragment; import android.app.Activity; import android.app.Dialog; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.annotation.StringDef; import android.support.v4.app.LoaderManager; import android.support.v4.content.Loader; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.EditText; import com.piusvelte.sonet.R; import com.piusvelte.sonet.loader.AddRssLoader; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; /** * Created by bemmanuel on 4/19/15. */ public class RssNameDialogFragment extends BaseDialogFragment implements LoaderManager.LoaderCallbacks<String> { private static final String ARG_URL = "url"; private static final String ARG_NAME = "name"; private static final int LOADER_RSS = 0; @StringDef({ ARG_URL, ARG_NAME }) @Retention(RetentionPolicy.SOURCE) private @interface Argument { } private EditText mName; private View mLoadingView; public static RssNameDialogFragment newInstance(int requestCode, @NonNull String url) { RssNameDialogFragment dialogFragment = new RssNameDialogFragment(); dialogFragment.setRequestCode(requestCode); Bundle args = dialogFragment.getArguments(); args.putString(ARG_URL, url); return dialogFragment; } @NonNull @Override public Dialog onCreateDialog(Bundle savedInstanceState) { Dialog dialog = super.onCreateDialog(savedInstanceState); dialog.setTitle(R.string.rss_channel); return dialog; } @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { return inflater.inflate(R.layout.rss_name, container, false); } @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { mName = (EditText) view.findViewById(R.id.rss_name); mLoadingView = view.findViewById(R.id.loading); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); mLoadingView.setVisibility(View.VISIBLE); getLoaderManager().initLoader(LOADER_RSS, getArguments(), this); } @Override public void onDestroyView() { mName = null; mLoadingView = null; super.onDestroyView(); } @Override public void onCancel(DialogInterface dialog) { String name = mName.getText().toString(); int resultCode = TextUtils.isEmpty(name) ? Activity.RESULT_CANCELED : Activity.RESULT_OK; getArguments().putString(ARG_NAME, name); deliverResult(resultCode); } @Override public Loader<String> onCreateLoader(int id, Bundle args) { switch (id) { case LOADER_RSS: return new AddRssLoader(getActivity(), args.getString(ARG_URL)); default: return null; } } @Override public void onLoadFinished(Loader<String> loader, String data) { switch (loader.getId()) { case LOADER_RSS: mLoadingView.setVisibility(View.GONE); break; } } @Override public void onLoaderReset(Loader<String> loader) { // NO-OP } private static String getArg(@Nullable Intent intent, @Nullable String defaultValue, @Argument String key) { if (intent == null) { return defaultValue; } return intent.getStringExtra(key); } @Nullable public static String getUrl(@Nullable Intent intent, @Nullable String defaultValue) { return getArg(intent, defaultValue, ARG_URL); } @Nullable public static String getName(@Nullable Intent intent, @Nullable String defaultValue) { return getArg(intent, defaultValue, ARG_NAME); } }