// Copyright 2015 The Project Buendia Authors
//
// 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 distrib-
// uted 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
// specific language governing permissions and limitations under the License.
package org.projectbuendia.client.ui.login;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.GridView;
import org.projectbuendia.client.App;
import org.projectbuendia.client.R;
import org.projectbuendia.client.json.JsonUser;
import org.projectbuendia.client.ui.ProgressFragment;
import org.projectbuendia.client.utils.Colorizer;
import org.projectbuendia.client.utils.Logger;
import java.util.List;
import javax.inject.Inject;
import butterknife.ButterKnife;
import butterknife.InjectView;
import butterknife.OnItemClick;
/** Fragment for {@link LoginActivity}. */
public class LoginFragment extends ProgressFragment {
private static final Logger LOG = Logger.create();
private FragmentUi mFragmentUi = new FragmentUi();
private UserListAdapter mUserListAdapter;
@Inject Colorizer mUserColorizer;
@InjectView(R.id.users) GridView mUserGrid;
@Override public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
App.getInstance().inject(this);
setContentView(R.layout.login_fragment);
mUserListAdapter = new UserListAdapter(getActivity(), mUserColorizer);
}
@Override public View onCreateView(
LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = super.onCreateView(inflater, container, savedInstanceState);
ButterKnife.inject(this, v);
mUserGrid.setAdapter(mUserListAdapter);
return v;
}
/** Returns the {@link FragmentUi} for interfacing with the {@link LoginController}. */
public FragmentUi getFragmentUi() {
return mFragmentUi;
}
@OnItemClick(R.id.users) void onUsersItemClick(int position) {
LoginController controller =
((LoginActivity) getActivity()).getUserLoginController();
if (controller != null) {
controller.onUserSelected(mUserListAdapter.getItem(position));
} else {
LOG.e("No LoginController available. This should never happen.");
}
}
private class FragmentUi implements LoginController.FragmentUi {
@Override public void showSpinner(boolean show) {
changeState(show ? State.LOADING : State.LOADED);
}
@Override public void showUsers(List<JsonUser> users) {
mUserListAdapter.setNotifyOnChange(false);
mUserListAdapter.clear();
mUserListAdapter.addAll(users);
mUserListAdapter.notifyDataSetChanged();
}
}
}