/* * Copyright 2015. Appsi Mobile * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.appsimobile.appsii.module.apps; import android.app.Activity; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.Spinner; import android.widget.TextView; import com.appsimobile.appsii.BuildConfig; import com.appsimobile.appsii.R; import com.appsimobile.appsii.module.BaseListAdapter; import com.appsimobile.appsii.module.ViewHolder; import java.util.ArrayList; import java.util.List; /** * Created by nick on 19/09/14. */ public class ReorderAppsActivity extends Activity implements AppTagUtils.AppTagListener, AdapterView.OnItemSelectedListener { public static final String EXTRA_PRESELECT_TAG_ID = BuildConfig.APPLICATION_ID + ".preselect_tag_id"; /** * The view-pager containing each of the tabs (tags) the user created */ SpinnerAdapter mSpinnerAdapter; Spinner mSpinner; ReorderAppsFragment mReorderAppsFragment; long mPreselectId; boolean mPreselected; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // register the app-tag listener, and update the list in the actionbar. setContentView(R.layout.activity_reorder_apps); mSpinner = (Spinner) findViewById(R.id.spinner); mSpinnerAdapter = new SpinnerAdapter(); mSpinner.setAdapter(mSpinnerAdapter); mReorderAppsFragment = (ReorderAppsFragment) getFragmentManager(). findFragmentById(R.id.reorder_apps_fragment); mSpinner.setOnItemSelectedListener(this); mPreselectId = getIntent().getLongExtra(EXTRA_PRESELECT_TAG_ID, -1); if (savedInstanceState != null) { mPreselected = savedInstanceState.getBoolean("preselected"); } } @Override protected void onStart() { super.onStart(); List<AppTag> tags = AppTagUtils.getInstance(this).registerAppTagListener(this); mSpinnerAdapter.setItems(tags); preselectSelection(tags); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putBoolean("preselected", mPreselected); } @Override public void onStop() { super.onStop(); AppTagUtils.getInstance(this).unregisterAppTagListener(this); } private void preselectSelection(List<AppTag> appTags) { if (!mPreselected) { mPreselected = true; int N = appTags.size(); for (int i = 0, idx = 0; i < N; i++) { AppTag appTag = appTags.get(i); if (appTag.id == mPreselectId) { mSpinner.setSelection(idx); break; } if (appTag.tagType == AppsContract.TagColumns.TAG_TYPE_USER) { idx++; } } } } @Override public void onTagsChanged(ArrayList<AppTag> appTags) { mSpinnerAdapter.setItems(appTags); preselectSelection(appTags); } @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { AppTag appTag = mSpinnerAdapter.getItem(position); mReorderAppsFragment.setAppTag(appTag); } @Override public void onNothingSelected(AdapterView<?> parent) { } static class SpinnerAdapter extends BaseListAdapter<AppTag, SpinnerViewHolder> { private final List<AppTag> mAppTags = new ArrayList<>(); @Override protected long getItemId(AppTag item) { return item.id; } @Override protected SpinnerViewHolder newViewHolder(LayoutInflater inflater, ViewGroup parent) { View view = inflater.inflate(R.layout.list_item_tag_spinner, parent, false); return new SpinnerViewHolder(view); } @Override protected void bindViewHolder(AppTag item, SpinnerViewHolder holder) { holder.mTextView.setText(item.title); } @Override public void setItems(List<AppTag> items) { // we keep this in our own (temp) list // because we only want to display the user type tags mAppTags.clear(); for (AppTag tag : items) { if (tag.tagType == AppsContract.TagColumns.TAG_TYPE_USER) { mAppTags.add(tag); } } super.setItems(mAppTags); } } static class SpinnerViewHolder extends ViewHolder { final TextView mTextView; public SpinnerViewHolder(View view) { super(view); mTextView = (TextView) view.findViewById(R.id.tag_title); } } }