package com.quinn.githubknife.ui.activity; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; import android.support.v7.widget.Toolbar; import android.text.TextUtils; import android.util.Log; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import com.afollestad.materialdialogs.MaterialDialog; import com.quinn.githubknife.R; import com.quinn.githubknife.ui.BaseActivity; import com.quinn.githubknife.ui.adapter.FragmentPagerAdapter; import com.quinn.githubknife.ui.fragments.TrendingReposFragment; import com.quinn.githubknife.utils.Constants; import com.quinn.httpknife.github.TrendingRepo; import java.io.File; import java.util.HashMap; import butterknife.Bind; import butterknife.ButterKnife; public class TrendingActivity extends BaseActivity { private final static String TAG = "TrendingActivity"; @Bind(R.id.toolbar) Toolbar toolbar; private FragmentPagerAdapter adapter; private String trendingRepoUrl = Constants.TRENDING_BASE_URL; private String trendingUserUrl = ""; private TrendingReposFragment fragment; private String SINCE_TYPE_TODOY = ""; private String SINCE_TYPE_WEEK = "?since=weekly"; private String SINCE_TYPE_YEAR = "?since=monthly"; private String[] SINCE_TYPES = {SINCE_TYPE_TODOY, SINCE_TYPE_WEEK, SINCE_TYPE_YEAR}; private String currentSinceType = SINCE_TYPES[0]; private static final HashMap<String, String> languageUrlMap = new HashMap<>(); private String[] languages; private String[] urlParams; private String currentLanguage; private int lastLanguageDialogSelected = 0; private int lastTimeDialogSelected = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.i(TAG, "onCreate"); setContentView(R.layout.activity_fo); ButterKnife.bind(this); toolbar.setTitle(R.string.Trending); setSupportActionBar(toolbar); getSupportActionBar().setHomeButtonEnabled(true); //设置返回键可用 getSupportActionBar().setDisplayHomeAsUpEnabled(true); languages = getResources().getStringArray(R.array.language); urlParams = getResources().getStringArray(R.array.language_param); initialLanguages(); FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); fragment = TrendingReposFragment.getInstance(trendingRepoUrl); fragmentTransaction.add(R.id.container, fragment); fragmentTransaction.commit(); } private void initialLanguages() { if(languages == null || urlParams == null || languages.length != urlParams.length || languages.length == 0) { throw new IllegalStateException("You have not define languages"); } for(int i = 0, count = languages.length; i < count; i++) { languageUrlMap.put(languages[i], urlParams[i]); } currentLanguage = languages[0]; } @Override public boolean onCreatePanelMenu(int featureId, Menu menu) { MenuInflater menuInflater = getMenuInflater(); menuInflater.inflate(R.menu.menu_trending, menu); return super.onCreatePanelMenu(featureId, menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: finish(); return true; case R.id.action_time: showTimeSelectDialog(); return true; case R.id.action_set: showLanguageSelectDialog(); return true; } return super.onOptionsItemSelected(item); } public void showTimeSelectDialog() { new MaterialDialog.Builder(this) .title(R.string.since) .items(R.array.Time) .itemsCallbackSingleChoice(lastTimeDialogSelected, new MaterialDialog.ListCallbackSingleChoice() { @Override public boolean onSelection(MaterialDialog dialog, View view, int which, CharSequence text) { Log.i(TAG, "onSelection " + text); lastTimeDialogSelected = which; currentSinceType = SINCE_TYPES[which]; updateUrl(currentSinceType, languageUrlMap.get(currentLanguage)); switch (which) { case 0: fragment.setSinceType(TrendingRepo.SINCE_TYPE.SINCE_DAY); break; case 1: fragment.setSinceType(TrendingRepo.SINCE_TYPE.SINCE_WEEK); break; case 2: fragment.setSinceType(TrendingRepo.SINCE_TYPE.SINCE_MONTH); break; } fragment.reload(trendingRepoUrl); return true; } }) .cancelable(true) .show(); } public void showLanguageSelectDialog(){ new MaterialDialog.Builder(this) .title(R.string.language) .items(languages) .itemsCallbackSingleChoice(lastLanguageDialogSelected, new MaterialDialog.ListCallbackSingleChoice() { @Override public boolean onSelection(MaterialDialog dialog, View view, int which, CharSequence text) { Log.i(TAG, "onSelection " + text); currentLanguage = text.toString(); toolbar.setSubtitle(currentLanguage); lastLanguageDialogSelected = which; updateUrl(currentSinceType, languageUrlMap.get(currentLanguage)); fragment.reload(trendingRepoUrl); return true; } }) .cancelable(true) .show(); } private void updateUrl(String sinceString, String languageString) { if(TextUtils.isEmpty(languageString)) { trendingRepoUrl = Constants.TRENDING_BASE_URL + sinceString; } else { trendingRepoUrl = Constants.TRENDING_BASE_URL + File.separator + languageString + sinceString; } } public static Intent createIntent(Context context) { Intent intent = new Intent(context, TrendingActivity.class); return intent; } }